package com.yang;
public class QuickPaiX {
//快排的实现
//实现原理:选定一个基数,其他的元素与基数进行比较
// 小的放在其左边与其位置交换,大的放在其右边与其交换后的位置进行交换;
// 一个整的循环结束,整个数组的元素小的就在其左边,大的就在其右边;基数就处于中间位置
//接着进行分别基数左边的元素进行递归,右边的元素进行递归
public static int[] quickPaiX(int [] arr,int begin,int end){
if(begin>=end){
return null;
}
//使用最左边的数作为基数
int base=arr[begin];
int i=begin;
int j=end;
//当i<j时候才进行整个循环;
while(i<j){
//从end位置循环查找比基数小的数(包括等于)
while(i<j&&arr[j]>=base){
j--;
}
//从最左边begin位置寻找比基数大的数(包括等于)
while(i<j&&arr[i]<=base){
i++;
}
//寻找到之后进行位置大的交
if(i<j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//一个整的循环结束后分别对基数两边的元素进行递归
//交换基数的位置
arr[begin]=arr[i];
arr[i]=base;
quickPaiX(arr,begin,i-1);
quickPaiX(arr,i+1,end);
return arr;
}
public static void main(String[] args){
int[] a={5,6,7,1,2};
int[] arr=quickPaiX(a,0,a.length-1);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
}
}
这是经过各种坑之后写的相对标准以及更好理解的代码。