常见排序算法

1.冒泡排序

         1 3 5 7 9 2 4 6 8

i=0   1 3 5 7 2 4 6 8 9

i=1   1 3 5 7 2 4 6 8 9

i=2   1 3 5 2 4 6 7 8 9

i=3   1 3 5 2 4 6 7 8 9

i=4   1 3 2 4 5 6 7 8 9

i=5   1 3 2 4 5 6 7 8 9

i=6   1 2 3 4 5 6 7 8 9

i=7   1 2 3 4 5 6 7 8 9

从i=0开始,两两比较直至i=array.length-1-i。

 

2.选择排序

         1 3 5 7 9 2 4 6 8

i=0   1 3 5 7 9 2 4 6 8

i=1   1 2 5 7 9 3 4 6 8

i=2   1 2 3 7 9 5 4 6 8

i=3   1 2 3 4 9 5 7 6 8

i=4   1 2 3 4 5 9 7 6 8

i=5   1 2 3 4 5 6 7 9 8

i=6   1 2 3 4 5 6 7 9 8

i=7   1 2 3 4 5 6 7 8 9

从i=0开始,从后面至i=array.length-1-i的元素中,选择出最小的元素与i元素置换。

 

3.插入排序

轨迹与选择排序相同,区别是默认i之前的元素有序,把i元素置换到前面正确的升序位置中。

 

4.希尔排序

     1 3 5 7 9 2 4 6 8

i=3   1 3 2 4 6 5 7 9 8

(划分成数组[1,7,4],[3,9,6],[5,2,8]排序后为[1,4,7],[3,6,9],[2,5,8])

i=2   1 3 2 4 5 6 7 9 8

i=1   1 2 3 4 5 6 7 8 9

按照一个值i将数组进行划分,将划分出的数组分别进行插入排序,然后合并,递减i的值至1,完成排序。

希尔排序的优势在于数据量较大时可执行较少次数的元素置换。

(关于值i的设定目前还没研究清楚。)

 

5.快速排序

         1 3 5 7 9 2 4 6 8

i=0   1 3 5 7 9 2 4 6 8

i=1   1 2 5 7 9 3 4 6 8

         1 2 3 7 9 5 4 6 8

i=2   1 2 3 6 9 5 4 7 8

    1 2 3 6 7 5 4 9 8

    1 2 3 6 4 5 7 9 8

i=3   1 2 3 5 4 6 7 8 9

i=4   1 2 3 4 5 6 7 8 9

快速排序的优势在于一次即可确定该元素的最终位置。

 

6.归并排序

         1 3 5 7 9 2 4 6 8

i=0   1 3 5 7 2 9 4 6 8

i=1   1 3 5 7 2 4 6 9 8

i=2   1 2 3 4 5 6 7 9 8

i=3   1 2 3 4 5 6 7 8 9

先划分为若干个小数组,然后再两两进行归并。

 

市面上关于排序有巨多版本,我只记录我的理解,以后会附上java代码实现。

 

posted @ 2013-02-20 10:19  息搏  阅读(132)  评论(0)    收藏  举报