快速排序

快速排序

快速排序对于初学者来说是一个比较难的排序算法了,说实话我刚上大一的时候,去图书馆看快速排序简直给我整疯了,所以一开始不会也是正常的。可以从下面几个部分去理解
1.先要弄懂递归算法,在我的博客中也有我对递归的一个介绍
2.弄懂排序过程:我建议大家不要只看代码,去看一下视频可能帮助大家更快的了解这个过程到底是怎样的,下面附上我在b站上找的视频连接,https://www.bilibili.com/video/av39093184?from=search&seid=12927155253366265270
3.看完视频后可以用一些自己造的数组例子模仿视频过程带进去试一试
4.觉得自己前几部分都完成之后,可以先构建构建思路了,有了大的框架后就可以动手写代码了

附上我的代码

public class Main {
	public static void func(int left,int right,int[] nums){
		if(left>=right)//递归结束的条件
			return;
		int i=left;
		int j=right;
		int flag=nums[left];//标志位
		
		while(i<j){
			while(i<j&&nums[j]>=flag){
				j--;
			}
			while(i<j&&nums[i]<=flag){
				i++;
			}
			int temp=nums[i];
			nums[i]=nums[j];
			nums[j]=temp;
		}
		nums[left]=nums[i];
		nums[i]=flag;
		func(left, i-1, nums);
		func(i+1, right, nums);
		
	}
	public static void main(String[] args) {
		int[] nums={3,5,7,8,9,1};
		func(0, 5, nums);
		for(int i:nums){
			System.out.println(i);
		}
	}

}

初学者容易错的地方应该有这几个地方:
1.递归的终止条件
2.最后要将标志位与i,j指向的位置进行交换
3.下次传参到递归函数,参数的变换
如果弄懂了递归的话,其实这个算法并不难,当你还是不会的时候你应该想想是第几歩出问题了,不要慌。
希望对大家有帮助
在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值