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