七大排序适用总结

算法记忆:(小白垂死挣扎版)
1、冒泡排序(改进版):利用sorted布尔标志,先置0进入循环判断,再置1,i从第一个元素lo开始到hi的前一个元素,比较i和i+1的元素,若逆序,发生交换,sorted标志置假;
2、快速排序:通过partition得到轴点,再分别以轴点为界递归调用;partition算法着重于挖坑,和设置哨兵i和j,j要先从hi的位置开始走;while while if和while if,出了外层while循环后两哨兵相遇,并形成坑,将pivot放入;并得到i;
3、归并排序:重点在归,用空间换取了时间效率,在merge的子函数中,申请B存放以mi为界的前部分数据,C直接指向mi+1位置的元素就行;在保证j,k并未越界的情况下,if(j<lb && !(k<lc) || B<C)a[i++]=B[j++];
4、插入排序:手上拿的元素key=a[i],i从lo+1开始,记录已排序最后一个元素的下标j=i-1;当手上拿的元素比前面的元素小时,前面的元素一个一个往后挪一个位置,直至找到key该有的位置;因为在前面的while循环中i递减,出循环后应把key放在a[i+1]的位置;
5、选择排序:先声明index;外循环i从lo开始,到lo+n-1结束(因为j在i的基础上+1),把i给index;外循环j从i+1开始,到lo+n结束,依次与i后的元素进行比较,逆序则index得到当前的j;出了内循环,交换index和i对应的元素;
6、希尔排序:定gap声明insertnum;while(gap);外循环for,i从lo+gap开始,insert保存a[i]值,j=i;内循环while,判断j>=gap+lo以及insertnum是否小于a[j-gap],真则j与j-gap对应的元素发生交换,j-=gap;出了内循环insertnum给a[j];出了外循环gap递减;
7、堆排序:建堆调整堆(从最后一个非叶节点开始,下标为(size-1)/2,调整堆时需要注意maxIndex若有子节点,则仍需调整);堆顶和最后一个元素交换,之后需调整剩下的0-size-2个元素的堆序性;


七大排序.jpg

稳定性上:只有冒泡,归并、插入是稳定的;


适用场合总结:
平均性能上:堆排序、归并排序、快速排序>希尔排序>>冒泡排序、插入排序、选择排序
最好情况:冒泡排序和插入排序更好
最坏情况:堆排序和归并排序
快速排序性能不稳定

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,241评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,754评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,290评论 0 2
  • 昨天居然睡着了,前天也忘记了,难过脸 今天说说好呢 上饶很热,这两天刚刚凉快一点。楼下又开始了广场舞的音乐。 小城...
    当度左右阅读 225评论 0 0
  • 安全员 文/诗缘 如何当好安全员, 责任二字装心间, 宁可挨骂不听哭, 员工生命大如天, 情系安全嘴唠叨, 婆婆妈...
    蒋水敏阅读 528评论 0 6