
排序算法
f斗牛士
这个作者很懒,什么都没留下…
展开
-
(C++)数据结构排序---二路归并排序
二路归并排基本思想:把拥有n个数据的数组看做n个有序序列,然后两两归并,得到n/2组有序序列;重复上述操作,达到n/4组有序序列;重复上述操作,直到n个数据均为有序。平均情况的时间复杂度 最好情况的时间复杂度 最坏情况的时间复杂度 空间复杂度 O(nlog2(n)) O(nlo...原创 2018-06-21 22:49:42 · 2120 阅读 · 0 评论 -
(C++)数据结构排序---堆排序
堆排序是选择排序的一种改进。堆是一种特殊的完全二叉树:每个节点的值都小于或等于其左右子节点的值(小顶堆),反之为大顶堆。堆排序的关键是:创建堆和抽掉堆顶之后的堆重建。注意:设n个数据在数组a[1]~a[n]中,当前要筛选的节点编号为k,堆中最后一个节点的编号为m,且k的左右子树均为堆。template<class Type> void Shift(Type a[],int k,int...原创 2018-06-21 17:30:26 · 199 阅读 · 0 评论 -
(C++)数据结构排序---快速排序
快速排序几乎是最快的排序算法。在所有关键字为逆序时排序速度最快。基本思想:在待排记录中选取一个记录做为枢纽。数组中的数据与枢纽作对比,从而分成两部分,左边小于枢纽值,右边部分大于枢纽值。枢纽为分界线。划分过程如下:(1)选取数组第一个数字作为基准,存储起来,设两个值分别指向数组头部尾部的下标,分别为i,j。(2)a[j]与基准作比较,若a[j]大于基准,则j前移,直到找到第一个小于基准的值,此时,...原创 2018-06-21 15:59:53 · 971 阅读 · 0 评论 -
(C++)数据结构排序---希尔排序
希尔排序是对直接插入排序的一种改进算法。它基于插入排序的两个性质:(1)若待排序记录按关键字基本有序,直接插入排序效率很高(2)若带排记录个数较少,直接插入排序效率很高希尔排序的基本思想:一个数组有n个数据,把所有数据以间距m分组,分成n/m个组,间距为m的数据为一组数据;例如有10个数据,以间距5分组,a[0],a[5]为一组;a[1],a[6]为一组;...a[4],a[9]为一组,每组数据进...原创 2018-06-21 15:15:27 · 238 阅读 · 0 评论 -
(C++)数据结构排序---插入排序
插入排序基本思想:一个数组拥有n个数据,从第二个数据a[1]开始,与前面的数据a[0]比较,若a[1]<a[0],则a[1],a[0]互换位置,此时前两个数据为有序数据(由小到大);继续看第三个数据a[3],a[3]依次与前面的数据作比较,若a[3]<a[2],则二者互换位置,再与前一个数据比较,直到找到正确的位置。需要进行(n-1)趟比较,第一趟进行一次比较,第n-1趟进行(n-1)...原创 2018-06-21 11:23:37 · 157 阅读 · 0 评论 -
(C++)数据结构排序---选择排序
选择排序基本思想:一个数组a有n个数据,首先对n个数据进行(n-1)次比较,可得该组数据最大值或最小值,把该值与第一个数据(a[0])交换位置;剩下的数据,按上述方法依次取得最大(小)值,即可获得有序数据。由上可知,共需进行(n-1)趟比较。需要两个辅助空间。比较次数为:n*(n-1)/2平均情况的时间复杂度 最好情况的时间复杂度 最坏情况的时间复杂度...原创 2018-06-21 10:41:33 · 202 阅读 · 0 评论