花五分钟口语化过下几种排序思路

在这里插入图片描述

冒泡排序

时间复杂度是O(n^2),
一开始交换的区间是0~n-1,也就是整个数据的整体,然后第一个数与第二个数进行比较,哪个大哪个就放在后面,然后第二个数和第三个数比较,**这样依次交换过去,最大的数最终会放在数组最后的一个位置。
然后把范围从0~n-1变为0~n-2,这样一来第二个数在交换过后,会放在整个数据倒数第二个位置
依次进行交换过程中,把范围从0~n-1 到 范围只剩下一个数的时候,整个数组就变得有序了
在这里插入图片描述

选择排序

时间复杂度是O(n^2),
一开始从0~N-1数据上选择一个最小值把它放到第零个位置上;
然后从1~N-1上选择一个最小值放到第一位置上;
这样依次从0~N-1到1~N-1,2~N-1……直到最后只包含一个数的时候,整个数就变得有序了

插入排序

时间复杂度是O(n^2),
首先是位置1的数和位置0的数进行比较,如果位置1的数比位置0的数小,就比较两者的位置;
接着是位置2的数和位置1的数进行比较,……,排完后如果位置1的数比位置0还小……;
也就是说位置k的数假设值为b依次和前面位置的数进行比较,如果小,就依次和前面的数进行交换的过程,直到前面的数一直小于等于b,那么b就插入当前位置。
那么我们依次从一位置到N-1位置的所有数都进行这样的比较,进行插入的过程,整个数就变得有序了

在这里插入图片描述在这里插入图片描述

归并排序

规定数中的每一组长度为一的有序区间
然后把相邻的为1的有序区间,进行合并,得到一个相邻长度为二的有序区间,最后再把相邻的有序区间进行合并得到长度为4的有序区间,依次这样下去,4和八,八和十六,直到所有的数字合并成为n的区间,那么整个数就变得有序了

快速排序

随机的在数据中选择一个元素,小于对于它的数,统一的放在它的左边,大于它的数,放在它的右边。
然后接下来对这两个部分的数进行递归调用快速排序的过程,这样使得整个数都有序了。
划分过程是怎么样的?
首先将划分值放在整个数的最后的位置,然后设计一个小于等于区间初始时长度为0,放在整个数组的左边
然后从左到右遍历所有元素,如果当前元素大于我的划分值,那就继续遍历下一个元素,如果当前值小于等于我划分的值,那么我就把当前数和之前定义小于等于区间的下一个数进行交换, 然后令小于等于区间向右挪动一个位置,然后遍历所有的元素,直到最后的数的时候,也就是划分值,与小于等于区间的下一个元素进行交换。整个就是一个完整的划分过程,
它的时间复杂度为O(N),

堆排序

先把数组中的n个数建立成一个大小为n 的大根堆,那么我们知道堆顶是所有元素中最大的一个值,把堆顶元素和最后一个元素进行交换,然后把最大值脱离堆结构,放到数组的最后一个位置
……

希尔排序

它是快速排序的改良版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值