总结排序

这次开始学习排序。

 

1 排序:整理表中数据使之按照关键字递增或递减(有序排列)。

2 例子: (1)高考按分数排列 (2)有些高速查找,就算先使用排序再去查找也是值得的。

重重重重:

性能: 1 时间复杂度:这么多年了,你懂得。

   2 空间复杂度:这么多年了,你懂得。

   3 稳定性:这是一个新概念。比如两个高考成绩相同的人,按照总成绩,他俩是一样的,但是比如有数学成绩做要求,要求数学高的在前,这时不能不能有差池。(稳定性需要再研究)。

3 分类:内排序,外排序。

其中内排序:只是在内存里做事情。(数据量小,不需要内外存的交换)。

外排序:数据量大,需要内存与外存的交换。

 

<第一个重点>:插入排序:

每次讲一个待排序的记录,按其关键字大小,插入到前面的已经排好序的字表中的适当位置。

包括: 直接插入排序,希尔排序。

<>:直接插入排序:

思路:分为两个子区间(有序区与无序区),第一个子区间(有序区)就是第一个数,然后另外的区间即无序区中的第一个数与前面的数进行排序。形成新的有序区。

 

<>趟数:如果有8个元素,则需要(8-1)趟即7趟。因为第一个不需要去排序。直接做就好。

 

<>代码:

即两个循环:第一个循环是向后推进数字,第二个是把元素与前面的排序。

 

<>性能:O(n^2);

 

<第二个重点>:折半插入排序:????????

平均性能优于直接插入排序,但是他不是稳定的。

 

<第三个重点>:希尔排序:即分组插入。

比如10个数排序,任意设置组数,比如第一个分点是4.

数列是:3 7 9 6 4 3 7 0 4 8则,则第一组就是 344);

第二组就是 738);

第三组就是 97);

第四组就是 60);

排序得到的结果(通过直接排序(把组内排序))

3,4,4)(3,7,8)(7,9)(0,6

得到:(3  3  7  0  4  7  9  6  4  8);

然后再分组:4/2=2(直到为1):

(3, 7, 4, 9, 4)--------------(所得结果是)3 4 4 7 9

(3, 0, 7, 6, 8)--------------(所得结果是)0 3 7 6 8

整合:(3 0 4 3 4 7 7 6 9 8);

再排序。1(1 排序)

希尔面对的是复杂度高的问题。

他是不稳定的。

posted @ 2017-05-07 16:30  freebirds  阅读(87)  评论(0)    收藏  举报