首页 > 代码库 > asp.net 珠排序

asp.net 珠排序

珠排序(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 老田