八种排序算法之二:快速排序

public static void quicksort(int[] arr,int start,int end){
		//把数组中第0个作为标准数
		 int stard = arr[start];
		 //记录两个移动的坐标(两个小2兵)
		 //记录需要拍下的下标,刚开始是所有
		 //底的往高走,高的往低走
		 int low  = start;
		 int high = end;		 
		 //循环找比标准数大的数和比标准数小的
		 //如果右面找到的数比基准数小,那么替换
		 //如果比基准数大,那么只移动坐标,向左移动就行
		 while(low<high){
			 //如果右面的数比标准数大,那么向前走
			 while(low<high&&stard<=arr[high]){ 	 
				 high--;
			 }
			 //如果右边的比基准数小,那么右边的数替换基准数
			 //不需要写循环,不满足上一个条件自己就跳出来了
			 arr[low] = arr[high];
			 //如果替换之后,左边的数小于基准数,那么向后走
			 while(low<high&&arr[low]<=stard){
				low++; 	
			 }
			 //左边遇到比基准数大的数,去替换右边的
			 arr[high] = arr[low];
		 }
		 //当他们两个坐标重合后,把标准数填充到重合处
		 arr[low] = stard;
		 
	}

到这一步,做到:第一个数(基准数)把数组分割为两半,数组前面的是比基准数小的,后面都是比基准数大的
原数组:
在这里插入图片描述
第一步完成后:
在这里插入图片描述
加入递归:

//使用递归排序,得告诉他从哪排到哪
	public static void quickSort(int[] arr,int start,int end){
		//把数组中第0个作为标准数
		 int stard = arr[start];
		 //记录两个移动的坐标(两个小2兵)
		 //记录需要拍下的下标,刚开始是所有
		 //底的往高走,高的往低走
		 int low  = start;
		 int high = end;		 
		 //循环找比标准数大的数和比标准数小的
		 //如果右面找到的数比基准数小,那么替换
		 //如果比基准数大,那么只移动坐标,向左移动就行
		 while(low<high){
			 //如果右面的数比标准数大,那么向前走
			 while(low<high&&stard<=arr[high]){ 	 
				 high--;
			 }
			 //如果右边的比基准数小,那么右边的数替换基准数
			 //不需要写循环,不满足上一个条件自己就跳出来了
			 arr[low] = arr[high];
			 //如果替换之后,左边的数小于基准数,那么向后走
			 while(low<high&&arr[low]<=stard){
				low++; 	
			 }
			 //左边遇到比基准数大的数,去替换右边的
			 arr[high] = arr[low];
		 }
		 //当他们两个坐标重合后,把标准数填充到重合处
		 arr[low] = stard;
		 //现在高和低已经重合,我们需要使用上一轮的标准数把数组分割,然后重新再排
		 //start,end是输入的两个参数,没有变化
		 //递归
		 //处理所有小的数字
		 quickSort(arr,start,low);
		 //处理所有大的数字
		 quickSort(arr,low+1,end);
	}

但这会无限的递归下去,直到栈溢出
在这里插入图片描述
我们需要加入一个停止递归的条件:
开始位置start得小于结束位置end,才可以不断地循环下去

//加入停止递归的条件	
		if (start < end) {
		.......之上的代码
		}

运行,就可以看到我们排好的结果了
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值