珠排序(Bead sort) — O(n) or O(√n),
在排序的世界里 珠排序属于不实用的排序算法排序 原因是珠排序和硬件的依赖关系大,
目前网上只有一个c语言的版本 用指针做的闲来无聊研究一下此排序算法,并优化写出c#版本的给大家分享
现有 数组 198752 排序结果肯定是125789啦
珠排序的步骤是
X 1
XXXXXXXXX 9
XXXXXXXX 8
XXXXXXX 7
XXXXX 5
XX 2
垂直排序后(按重力落下)
X 1
XX 2
XXXXX 5
XXXXXXX 7
XXXXXXXX 8
XXXXXXXXX 9
也就是 125789排序好了
理论知道了,写出算法这就不简单了
既然计算机存储排序集合我们还得做运算 那么把X最多的看成行 集合的个数看成列
得到一个表(X,Y)的二维数组 我们需要优化此算法 所以我们应该在遍历数组时保证所有操作都在仅一次过程就得出结果的效率是最高的
那么上代码。
大体思路是这样把数组看成一个二维表 当插入数字的时候把数字分解成1 例:3=111 2=11
插入 198752 步骤
插入1得到 100000000 其实就是给newArr[0][0]插入了1,0是实例化初始值 不用插入
插入9细细讲解{插入9操作其实就是
000000000 变 111111111
100000000 100000000
第一步 9=11111111 拆成 一次插入一个1
000000000 变 100000000
100000000 100000000
判断X轴index=0的列
newArr[0][0]是1 newArr[0][1]目前为0 那么位置为 newArr[0][1] 那么在这插入1变成
同理再插入
000000000 变 110000000
100000000 100000000
这时 判断X轴index=1的列
newArr[1][0]是0 那么位置为 newArr[1][0] 结果变成了
110000000 变 100000000
100000000 110000000
继续把此行(值为9的)所有的位置都查 完最后就变成了
100000000 变 100000000
110000000 111111111
继续走 插入值为8的得到
000000000 变 011111111
100000000 100000000
111111111 111111111
判断X=1-9插入位 分别为 [1][1] [2][1] [3][1] [4][1] [5][1] [6][1] [7][1] [8][1]
插入后得到
000000000 变 000000000
100000000 111111111
111111111 111111111
}
这就实现了定位插入一个造作流程 此排序最后得到的结果为
这段程序为第一版本 今天刚写的 滑落部分代码可以用二分法提高性能 后期再修改
需要源码加QQ:792801526 老田
原文地址:http://www.cnblogs.com/laotian/p/3892708.html