十大经典排序算法小结(附源码和菜鸟版注释)

十大经典排序算法(动画演示)这篇博客的指导下,博主一点一点码出了十大排序算法,并写了菜鸟级注释源码戳这里,下面记录一下自己的总结,基本上是从注释搬来的。

排序算法主要分两类,一类是比较类排序,一类是非比较类排序。

一、比较类排序

通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。比较类排序算法和核心在于比较,只是比较的方法不一样,主要有交换排序、插入排序、选择排序。

1.1 交换排序

即通过数与数之间地交换,如冒泡排序和快速排序。
冒泡排序:通过相邻两个数之间的比较,交换两个数的位置使之满足统一的规律(比如左边始终比右边小),不断将最大/小数“冒”出来放在顶端;
快速排序:还是通过不断交换,使得选中的基准数交换到属于它的位置(即左边全部小于或大于它,右边反之),然后固定不动,对左右两边的数重复这一操作,直到所有的数都固定不动。使用的是分治法,其实思路很简单,假设基准是左边第一个数,左边全是小于基准的数,操作就是把左边出现的大于基准的数与右边出现的小于基准的数对调位置,最后把最后一个小于基准的数和基准对调位置即可,然后对左右两边重复操作。

public static void QuickSort(int[] num, int left, int right) {
   
		//如果left等于right,即数组只有一个元素,直接返回
		if(left>=right) {
   
			return;
		}
		//设置最左边的元素为基准值
		int key=num[left];
		//数组中比key小的放在左边,比key大的放在右边,key值下标为i
		int i=left;
		int j=right;
		while(i<j){
   
			//j向左移,直到遇到比key小的值
			while(num[j]>=key && i<j){
   
				j--;
			}
			//i向右移,直到遇到比key大的值
			while(num[i]<=key && i<j){
   
				i++;
			}
			//i和j指向的元素交换
			if(i<j){
   
				in
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThetaQing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值