总结排序
这次开始学习排序。
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则,则第一组就是 (3,4,4);
第二组就是 (7,3,8);
第三组就是 (9,7);
第四组就是 (6,0);
排序得到的结果(通过直接排序(把组内排序))
(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 排序)
希尔面对的是复杂度高的问题。
他是不稳定的。
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号