七种常见的排序算法主要原理(插入排序,选择排序,交换排序,归并排序,基数排序,快速排序,冒泡排序)

排序算法:插入排序,选择排序,交换排序,归并排序,基数排序,快速排序,冒泡排序

排序算法:基数排序,冒泡排序,快速排序,插入排序,选择排序,希尔排序,归并排序
	基数排序:按照位数来进行排序,从个位开始排序,首先建立一个二维数组,列的长度为10,接着按个位相同放入对应的列当中,
			然后取出,接着按照十位的情况进行排序,直到所有的位数全部排完为止。
			核心思想:从优先级最小的地方开始排序,逐步到优先级最高的地方,例如,十位大于个位,如果十位在前,那么不管个位如何,十位都在前面
					这就是基数排序的核心思想,有的时候也被称为桶子法,是一种稳定的排序算法
					
	冒泡排序:按照从前往后两个两个进行比较,如果发现前面大后面小,则进行交换,一轮结果之后,最大的值到达比较序列的最右端
			在比较总数据的n-1轮之后,完成最终的排序
			核心思想:每次比较之后,就已经找到整个序列的最大值了,此时不考虑最大值,找剩下序列的最大值,逐次交换之后,完成排序

	快速排序:借鉴冒泡排序算法的思想,在实际排序时,每次排序设立基准点,通过基准点来减少排序的次数,例如,第一次迭代,选择左边第一个数作为基准
			然后将数据集划分为两部分,第一部分为小于基准点的,第二部分为大于基准点的,接着在划分的两个部分当中进行下一步的求解,直到什么时候停止呢?
			迭代停止的点,就是划分之后的数据集为1时,此时不需要进行排序,例如只有三个数{1,2,3},选择基准为1时,左边没有数值了,右边有两个,此时迭代不停止
			{2,3}两个还需要接着排序,迭代两次,但是如果为{2,1,3},通过一次排序之后,两部分的值都已经排好序了,都为1,此时只需要迭代一次就满足条件了
			因此从上述的分析可以发现,当且仅当每个部分为0,或者为1时,停止分组,在书写算法时,建议使用递归的方式来进行,因为主要的思想就是递归思想

	插入排序:同样借鉴冒泡排序的思想,利用插入的方法进行,排序,一个元素一个元素的方式放入到数组当中,在比较时,第一个元素直接放入到数组,第二个元素和
			第一个比较完成之后,再放入到数组当中,其实在想完原理之后,我觉得使用链表来进行排序可能更加的方便,这样在每次添加时非常的方便

	选择排序:其主要的思想是,将序列划分为两种状态,第一种状态是有序状态,第二种状态是无序状态,刚开始是无序状态,然后开始向有序状态转变
			结束的条件是,此时没有无序的序列在序列当中,其实和冒泡排序非常像,只不过是选择排序只是选择最大值或者最小值,减少交换的次数

	希尔排序:插入排序的改进,但是是非稳定的排序算法,主要的原因在于比较值时的跳跃性,在比较时,以除以2(向下取余)为增量进行比较,
			就是初始的组别划分为长度/2来进行,假设长度为11,那么此时划分为5组,第一组包含{1,6,11}三个数据,其他组别包含两个数据,接下来划分为
			5/2个组别,为两组,第一组{1,3,5,7,9,11},第二组{2,4,6,8,10},最后划分为一组,这里比较依赖增量的数据,目前没有统一的标准。
			非稳定排序指的是在实际排序时,如果两个值是相同的,那么排序后不会影响值的前后顺序,也就是说值相同,排序前在前面,排序后也在前面

	归并排序:首先将所有的数拆分为单个的数据,在单个数据的基础上继续进行归并,在归并时,按照这个逻辑来进行,首先两个数组都从第一个元素开始
			在比较完成之后,小的进入归并后的数组,新开辟的,大的继续比较,此时的第一个值较小的数组指针向后移动一位,直到所有的数组都排序完毕
			这个方法的巧妙地方在于,前面都是排序好的,因此只需要移动指针就可以完成最终的排序过程
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值