快排算法思想:首先找一个值作为基准,一般是第一个值作为基准,假设基准值为key,然后分别定义start为i,end为j,将基准值key与j比较,如果比j小则j–继续比较;如果比j大则swap进行交换;接着将基准值key与i比较,如果比i大则i++继续比较;如果比i小则swap进行交换,直到i=j位置,第一次比较结束;然后递归将分开的两段进行比较,这样就可以排好序了。
时间复杂度:理想为O(nlogn),最坏情况为O(n^2)
Java代码实现如下:
public class QuickSortTest {
public static void quickSort(int[] intArr, int start, int end){
if(start >= end){
return;
}
int i = start;
int j = end;
int key = intArr[i];
boolean flag = true;
while(i != j){
if(flag){
if(key > intArr[j]){
swap(intArr, i, j);
flag = false;
} else{
j--;
}
} else{
if(key < intArr[i]){
swap(intArr, i, j);
flag = true;
} else{
i++;
}
}
}
quickSort(intArr, start, j - 1);
quickSort(intArr, i + 1, end);
}
private static void swap(int[] intArr, int i, int j){
int temp;
temp = intArr[i];
intArr[i] = intArr[j];
intArr[j] = temp;
}
public static void main(String[] args) {
int[] intArr = {2,10,3,22,88,12,4,16,9,32,45,11};
if(intArr == null || intArr.length == 0){
System.out.println("intArr can't be not null.");
}
//define start
int start = 0;
//define end
int end = intArr.length - 1;
quickSort(intArr, start, end);
for(int i = 0; i < intArr.length; i++){
System.out.print(intArr[i] + " ");
}
}
}