package algorithm.sort;
import java.util.Arrays;
/**
* 快排:O(n*logn);如果是从小到大排序;
* 思想:选一个关键数据,将数组分成以关键数据分割的独立两个子数组;比关键数据小的在左边,大的在右边,然后递归;
* @author wangchao
*/
public class Kuaipai {
public void sort(int[] array,int left,int right){
int flagL = left;
int flagR = right;
int seed = array[left];
while (flagL<flagR) {
while(flagL<flagR && array[flagR]>=seed){
flagR--;
}
if(flagL<flagR){
int temp = array[flagR];
array[flagR] = array[flagL];
array[flagL] = temp;
}
while(flagL<flagR && array[flagL]<=seed){
flagL++;
}
if(flagL<flagR){
int temp = array[flagR];
array[flagR] = array[flagL];
array[flagL] = temp;
}
}
if(flagL>left) sort(array,left,flagL-1);
if(flagR<right) sort(array,flagL+1,right);
}
public static void main(String[] args){
int[] array = new int[]{2,1,6,3,8,9,4,7,10,5,11,4,12,179,8};
Kuaipai pai = new Kuaipai();
pai.sort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
}
其他排序算法批量下载地址:几种经典的排序算法java实现