Java实现快速排序算法

快排算法思想:首先找一个值作为基准,一般是第一个值作为基准,假设基准值为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] + " ");
		}
	}
}

点赞