/**
* 快速排序 时间复杂度:nlog(n)
* @author Smilexs
*
*/
public class QuickSort {
public static void main(String[] args) {
int[] array=new int[]{12,35,3,18,75,31,76,8,5,3};
quickSort(array,0,array.length-1);
System.out.println("从小到大排序为:"+Arrays.toString(array));
}
/**
* 从小到大排序
* @param array
* @param startIndex 排序开始位置
* @param endIndex 排序结束位置
* @return
*/
private static void quickSort(int[] array,int startIndex,int endIndex) {
if(startIndex>=endIndex){
return;
}
int signValue=array[startIndex];//取排序的第一个数,作为标记
int i=startIndex;//左index
int j= endIndex;//右index
while(i!=j){
//找右边小于singValue的index,注意是 <=
if(signValue <= array[j] && i<j){
j--;
continue;
}
//找左边大于singValue的index---先右,保证i不会超过j
if(signValue >= array[i] && i<j){
i++;
continue;
}
if(i<j){
//交换两个值
int temp=array[i];
array[i] = array[j];
array[j] = temp;
}
}
//交换中间和标记的值
array[startIndex]=array[i];
array[i]=signValue;
//递归继续排序剩下的
quickSort(array, startIndex, i-1);
quickSort(array, i+1, endIndex);
}
}
结果:
快速排序算法讲解链接:http://wiki.jikexueyuan.com/project/easy-learn-algorithm/fast-sort.html