您的位置:首页 > 理论基础 > 数据结构算法

数据结构-排序算法的总结

2018-01-10 08:39 239 查看
1.排序的基本概念

1.1排序:按照一定的关键字,将一个序列排列成想要得到的一个新的序列。

1.2内部排序与外部排序:

1.2.1内部排序:整个排序过程完全在内存中进行。

1.2.2外部排序:由于待排序记录数据量太大,内存无法容纳全部数据,排序需要借助外部存储才能完成。

2 .插入类排序

2.1直接插入排序:

2.1.1思想:最基本的插入排序,将第i个插入到前i-1个中的适当位置。

2.1.2时间复杂度:T(n)=O(n²)。

2.1.3空间复杂度:S(n)=O(1)。

2.1.4稳定性:稳定排序。

2.2折半插入排序

2.2.1思想:因为是已经确定了前部分是有序序列,所以在查找插入位置的时候可以用折半查找的方法进行查找,提高效率。

2.2.2时间复杂度:T(n)=O(n㏒n)。

2.2.3空间复杂度:S(n)=O(1)。

2.2.4稳定性:稳定排序。

2.2.5改进思路:改进了确定插入位置方法:利用折半思想确定在有序表中的插入位置。

2.3希尔排序

2.3.1思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

2.3.2时间复杂度:T(n)=O(n的1.5次方)

2.3.3空间复杂度:S(n)=O(1)。

2.3.4稳定性:不稳定排序。

2.3.5改进思路:利用直接插入的最好情况:n比较小,基本有序。

3.交换类排序

3.1冒泡排序

3.1.1思想:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

3.1.2时间复杂度:T(n)=O(n²)。

3.1.3空间复杂度:S(n)=O(1)。

3.1.4稳定性:稳定排序。

3.2快速排序

3.2.1思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

3.2.2时间复杂度:T(n)=O(n㏒n)
最坏打算为O(n²)。

3.2.3空间复杂度:S(n)=O(㏒n)。

3.2.4稳定性:不稳定排序。

4.选择类排序

4.1简单选择排序

4.1.1思想:设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟
后就完成了记录序列的排序。

4.1.2时间复杂度:T(n)=O(n²)。

4.1.3空间复杂度:S(n)=O(1)。

4.1.4稳定性:不稳定排序。

4.1.5改进思路:基本排序方法。

4.2堆排序

4.2.1思想:把待排序记录的关键字存放在数组r[1…n]中,将r看成是一刻完全二叉树的顺序表示,每个节点表示一个记录,第一个记录r[1]作为二叉树的根,一下个记录r[2…n]依次逐层从左到右顺序排列,任意节点r[i]的左孩子是r[2i],右孩子是r[2i+1],双亲是r[i/2向下取整]。然后对这棵完全二叉树进行调整建堆。

4.2.2时间复杂度:T(n)=O(n㏒n)。

4.2.3空间复杂度:S(n)=O(1)。

4.2.4稳定性:不稳定排序。

4.2.5堆的建立:从无序序列建堆的过程就是一个反复调整的过程。若将此序列看成是一个完全二叉树,则最后一个非终端结点是第(n-2)/2个结点,由此调整过程只需从该结点开始,直到堆顶元素。

4.2.6堆的删除:堆中每次都只能删除堆顶元素。为了便于重建堆,实际的操作是将最后一个数据的值赋给根结点,然后再从根结点开始进行一次从上向下的调整。调整时先在左右子结点中找最小的,如果父结点比这个最小的子结点还小说明不需要调整了,反之将父结点和它交换后再考虑后面的结点。相当于根结点数据的“下沉”过程。

4.2.7改进方法:讲存储在向量中的数据元素看成一棵完全二叉树,减少辅助空间。

5.归并排序

5.1思想:基于合并,讲两个或者两个以上有序表合并成一个新的有序表。

5.2时间复杂度:T(n)=O(n㏒n)。

5.3空间复杂度:S(n)=O(n)。

5.4稳定性:稳定排序。

6.分配类排序

6.1链式基数排序

6.1.1思想:先分配,再收集,就是先按照一个次关键字收集一下,然后进行收集(第一个排序),然后再换一个关键字把新序列分配一下,然后再收集起来,又完成一次排序,这样所有关键字分配收集完后,就完成了排序。

6.1.2时间复杂度:T(n)=O(d(n+rd))。

6.1.3空间复杂度:S(n)=O(rd)。

6.1.4稳定性:稳定排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: