数据结构排序——插入选择堆冒泡快速归并基数

排序

各种方法的复杂度表

数据结构排序——插入选择堆冒泡快速归并基数_第1张图片

直接插入排序

初始可认为文件中的第1个记录己排好序,然后将第2个到第n个记录依次插入已排序的记录组成的文件中。在对第i个记录Ri进行插入时,R1,R2,…,Ri-1已排序,将记录Ri的排序码keyi与已经排好序的排序码从右向左依次比较,找到Ri应插入的位置,将该位置以后直到Ri-1各记录顺序后移。
哨兵r[0]存放上一次插入的数。
数据结构排序——插入选择堆冒泡快速归并基数_第2张图片
数据结构排序——插入选择堆冒泡快速归并基数_第3张图片

折半插入排序

根据插入排序的基本思想,在找第i个记录的插入位置时,前i-1个记录已排序,将第i个记录的排序码key[i]和已排序的前i-1个的中间位置记录的排序码进行比较,如果key[i]小于中间位置记录排序码,则可以在前半部继续使用二分法查找,否则在后半部继续使用二分法查找,直到查找范围为空,即可确定key[i]的插入位置。

2-路插入排序

数据结构排序——插入选择堆冒泡快速归并基数_第4张图片

希尔排序

先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序
数据结构排序——插入选择堆冒泡快速归并基数_第5张图片

快速排序

附设两个指针low和high,初值分别指向第一个记录和最后一个记录,设枢轴为 key;
(1)从high 所指位置起向前搜索,找到第一个不大于基准值的记录与枢轴记录相互交换;
(2)从low 所指位置起向后搜索,找到第一个不小于基准值的记录与枢轴记录相互交换。
(3)重复这两步直至low=high为止。
数据结构排序——插入选择堆冒泡快速归并基数_第6张图片

选择排序

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

堆排序

堆是一个完全二叉树;
堆中每个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。
堆化:
因为叶子节点是不需要堆化的,所以需要堆化的节点从倒数第二层开始。每个节点堆化的过程中,需要比较和交换的节点个数,跟这个节点的高度 k 成正比。
数据结构排序——插入选择堆冒泡快速归并基数_第7张图片
数据结构排序——插入选择堆冒泡快速归并基数_第8张图片
大顶堆的删除堆顶元素:
我们把最后一个节点放到堆顶,然后利用同样的父子节点对比方法。对于不满足父子节点大小关系的,互换两个节点,并且重复这个过程,直到父子节点之间满足大小关系为止。这就是从上往下的堆化方法。
数据结构排序——插入选择堆冒泡快速归并基数_第9张图片

归并排序

数据结构排序——插入选择堆冒泡快速归并基数_第10张图片

基数排序

数据结构排序——插入选择堆冒泡快速归并基数_第11张图片
数据结构排序——插入选择堆冒泡快速归并基数_第12张图片
数据结构排序——插入选择堆冒泡快速归并基数_第13张图片

起泡排序

起泡排序
for (i = 0; i < 9; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后
{
for (j = 0; j < 9 - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较

你可能感兴趣的:(数据结构)