排序

定义

   多个关键字的排序最终可以转化为单个关键字的排序


排序_第1张图片

排序的稳定性

        不稳定:记录a与记录b的排序相同,排序前a在b前面,排序后b在a前面


排序_第2张图片

内排序与外排序

            内排序:排序的数据全部在内存

            外排序:内存不能一次性装下所有记录,需要内外存之间交换顺序


冒泡排序


排序_第3张图片
排序_第4张图片
。。。

        冒泡排序优化


排序_第5张图片

        时间复杂度

                O(n*n)


简单选择排序

        每次从i到n中找到最小值的坐标并和第i为交换值,i从1变化到n


排序_第6张图片


排序_第7张图片

        时间复杂度

                O(n * n)


    直接插入排序

            将一个记录插入已经排好序的序列

排序_第8张图片


排序_第9张图片
排序_第10张图片
排序_第11张图片

        平均复杂度

                O(n2),性能比冒泡和简单选择排序好


希尔排序


排序_第12张图片
h初始化为记录长度,h = h / 3 + 1(和上图不太一样)

        平均时间复杂度


不稳定算法


堆排序

        堆是一个完全二叉树,每个节点值大于或等于子女节点的值(最大堆)或者每个节点值小于或等于子女节点值(最小堆)


排序_第13张图片

        堆建立

排序_第14张图片

                调整堆

排序_第15张图片
排序_第16张图片
排序_第17张图片

        堆排序思路

                   1.建立最大堆

                    2.堆顶元素和堆尾元素调换位置,出堆尾元素


排序_第18张图片

                    3.重新调整堆

        平均复杂度


和原始记录的排序状态无关,不稳定算法


归并排序

        

排序_第19张图片

        平均复杂度

                

稳定算法

快速排序

        

排序_第20张图片
排序_第21张图片
排序_第22张图片
排序_第23张图片
排序_第24张图片
排序_第25张图片
以5为坐标把数组分成两部分,同样进行处理,切分的结果如同二叉树

                                

排序_第26张图片

        快速排序优化

                优化pivotkey

                        三数取中,取左端、中间、右端数字中值最中间的数字

                        九数取中,随机取3个数,保存最中间的数字,取三次。取3次中间数的最中间一个为pivotkey

                优化不必要交换

                        

排序_第27张图片

        优化小数组的排序方案

                但数组元素不大于某个常数(7或者50等),选择直接插入排序

        优化递归操作

                尾递归

排序算法的比较

        

排序_第28张图片

你可能感兴趣的:(排序)