数据结构-排序算法的总结
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稳定性:稳定排序。
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稳定性:稳定排序。
相关文章推荐
- 数据结构几种排序算法详解和总结(java版)
- 数据结构各种排序算法总结
- 数据结构复习之排序算法的总结回顾
- 数据结构---九大排序算法再总结
- 挖掘算法中的数据结构(五):排序算法总结 和 索引堆及优化(堆结构)
- 数据结构-排序算法总结
- 数据结构-排序算法总结
- 数据结构-各类排序算法总结[续]
- 数据结构-各类排序算法总结(一)
- 内功修炼(一)---数据结构---总结及常用排序算法
- 数据结构笔记--总结各种排序算法及其应用
- 数据结构-各类排序算法总结(二)
- 数据结构各种排序算法总结
- 数据结构-各类排序算法总结[结局]
- 算法与数据结构-常用排序算法总结1-比较排序
- 数据结构之各种排序算法总结之快速排序
- 数据结构与算法总结4_排序算法
- 数据结构--七大排序算法总结
- 数据结构-各类排序算法总结(三)
- [数据结构]九大基础排序算法总结