快速排序

快速排序

快速排序对于初学者来说是一个比较难的排序算法了,说实话我刚上大一的时候,去图书馆看快速排序简直给我整疯了,所以一开始不会也是正常的。我觉得弄懂这个排序算法应该需要下面几个部分吧
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.下次传参到递归函数,参数的变换
如果弄懂了递归的话,其实这个算法并不难,当你还是不会的时候你应该想想是第几歩出问题了,不要慌。
希望对大家有帮助
快速排序