基础排序算法-(6)-快速排序
一、概念
快速排序采用的是分治法,其基本思想是将原问题分解成若干个规模更小但结构与原问题相似的子问题。通过递归地解决这些子问题,然后再将这些子问题的解组合成原问题的解。
二、算法步骤
1、在待排序数列的n个元素中任取一个元素,以该元素的排序码为基准,将所有元素分成两组,一组大于基准元素,另一组小于基准元素。
2、采用相同的方法对两组元素进行排序,直到所有元素都排在相应位置为止。
三、代码实现
public static int[] QuickSortASC(int [] sourceArray){
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
return quickSort(arr, 0, arr.length - 1);
}
private static int[] quickSort(int[] arr, int left, int right) {
if (left < right) {
int partitionIndex = partition(arr, left, right);
quickSort(arr, left, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, right);
}
return arr;
}
private static int partition(int[] arr, int left, int right) {
// 设定基准值(pivot)
int pivot = left;
int index = pivot + 1;
for (int i = index; i <= right; i++) {
if (arr[i] < arr[pivot]) {
swap(arr, i, index);
index++;
}
}
swap(arr, pivot, index - 1);
return index - 1;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
四、特征
特征 | 值 |
---|---|
平均时间复杂度 | O(nlog2n) |
最好情况下时间复杂度 | O(nlog2n) |
最坏情况时间下复杂度 | O(n²) |
空间复杂度 | O(log2n) |
稳定性 | 不稳定 |