八种基本排序问题 (第五篇 快速排序)

一.  快速排序的描述 

     快速排序是对冒泡法的一种改进, 基本思想是 :通过一次排序将想要排序的数组分为两个独立的部分,其中一部分的数据比另一部分的所有数据小  ,然后再按照此方法对两部分的数据分别快速排序(递归实现),依次达到整个数据的有序

     数组变为(小于k)   k   ( 大于k)

二. 实现思路

选择一个值为基值 左边一个下标表示从第一个开始 右边 从最后一个开始,开始比较

如果左边的比基值大,保存下来 找到右边的比基值小的数 相交换 就做好了一次比较,

直到left >right 跳出本次循环

三. 实现代码

package c06Sort;

import java.util.Arrays;
//快速
public class c05QuickSort {

public static void main(String[] args) {
	
	int []arr = {-9 ,23 ,0, 70,-56,78};
				
	Quick(arr,0,arr.length-1);
	System.out.println(Arrays.toString(arr));
}
	
public static void Quick(int []arr, int left,int right) {
	//排序数组,左下标 ,右下标  
	  int mid = (left+right)/2;  //中间基值下标
	 while(left <right) {
		//找左边的比中间的值大的 位置  ,与右边小的做交换
		while(arr[left] < arr[mid]) {
			left++;
		   }
		//找右边的
		while(arr[right] > arr[mid]) {
			right--;
		  }
		
		if(left>=right) {
			break;  //所有中间位置的前面都是比中间小的,后面都是大的,就跳出循环
		}
		//找到位置之后做交换
		int temp =arr[left];
		arr[left]=arr[right];
		arr[right]= temp;
	
		//判断左右位置和中间的值它们的大小 改变中间值 移位处理
		if(arr[left]==arr[mid]) {
			right--;  //前移,
		}
		if(arr[right]==arr[mid]) {
			left++;   //后移
		}
	 }
	 //如果left==right  就必须left++,right--;避免出现栈溢出
	 if(left==right) {
		 left++;
		 right--;
	 }
	 Quick(arr,0,mid-1);  //递归左边的数组
	 Quick(arr,mid-1,arr.length-1);
  }
	
}

四. 结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是小晴晴呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值