快速排序(Quick Sort)算法是一种分治思想的递归算法。
与归并排序算法不同的是,快速排序是先处理大数组再处理小数组,而归并排序是先排序小数组再排序大数组。
时间复杂度:最好和平均:,最坏:
空间复杂度:最好和平均:,最坏:
其中n是数组的长度。
排序算法步骤:
1 要排序的数组是a,其元素数量为n,令left = 0, right = n - 1
2 对区间[left, right]进行排序,若left >= right则直接结束
2.1 设a[m] = a[left]
2.2 将区间中所有小于a[m]的元素移到其左边,所有大于a[m]的元素移到其右边
2.3 此时对于left <= i <= m <= j <= right,满足a[i] <= a[m] <= a[j]
3 分别对区间[left, m - 1]和[m + 1, right]进行排序,回到步骤2
java代码实现:
import java.util.Arrays;
public class QuickSort {
public static void quickSort(int[] a) {
quickSort(a, 0, a.length - 1);
}
public static void quickSort(int[] a, int left, int right) {
if (left >= right) {
return;
}
int m = left;
for (int l = left, r = right; l < r;) {
for (; l < r; r--) {
if (a[r] < a[m]) {
swap(a, r, m);
m = r;
break;
}
}
for (; l < r; l++) {
if (a[l] > a[m]) {
swap(a, l, m);
m = l;
break;
}
}
}
quickSort(a, left, m - 1);
quickSort(a, m + 1, right);
}
public static void swap(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
public static void main(String[] args) {
int[] a = new int[] { 3, 4, 2, 1, 5 };
quickSort(a);
System.out.println(Arrays.toString(a));
}
}
本文介绍了快速排序算法,它是基于分治思想的递归算法,与归并排序处理数组顺序不同。文中给出了该算法的时间和空间复杂度,详细说明了排序步骤,还提供了Java代码实现及源代码地址。
609

被折叠的 条评论
为什么被折叠?



