sort/quick-sort
快速排序
- 最好
- O(n log n)
- 平均
- O(n log n)
- 最坏
- O(n^2)
- 空间
- O(log n)
- 稳定性
- 不稳定
- 方式
- 比较
选一种语言就能看到代码
def quick_sort(a, lo=0, hi=None): if hi is None: hi = len(a) - 1 if lo >= hi: return pivot = a[hi] cut = lo for i in range(lo, hi): if a[i] < pivot: a[i], a[cut] = a[cut], a[i] cut += 1 a[cut], a[hi] = a[hi], a[cut] quick_sort(a, lo, cut - 1) quick_sort(a, cut + 1, hi)
function quickSort(a, lo = 0, hi = a.length - 1) { if (lo >= hi) return; const pivot = a[hi]; let cut = lo; for (let i = lo; i < hi; i++) { if (a[i] < pivot) { [a[i], a[cut]] = [a[cut], a[i]]; cut++; } } [a[cut], a[hi]] = [a[hi], a[cut]]; quickSort(a, lo, cut - 1); quickSort(a, cut + 1, hi); }
static void swap(int a[], int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } void quick_sort(int a[], int lo, int hi) { if (lo >= hi) return; int pivot = a[hi]; int cut = lo; for (int i = lo; i < hi; i++) { if (a[i] < pivot) swap(a, i, cut++); } swap(a, cut, hi); quick_sort(a, lo, cut - 1); quick_sort(a, cut + 1, hi); }
void quick_sort(std::vector<int>& a, int lo, int hi) { if (lo >= hi) return; int pivot = a[hi]; int cut = lo; for (int i = lo; i < hi; i++) { if (a[i] < pivot) std::swap(a[i], a[cut++]); } std::swap(a[cut], a[hi]); quick_sort(a, lo, cut - 1); quick_sort(a, cut + 1, hi); }
static void QuickSort(int[] a, int lo, int hi) { if (lo >= hi) return; int pivot = a[hi]; int cut = lo; for (int i = lo; i < hi; i++) { if (a[i] < pivot) { (a[i], a[cut]) = (a[cut], a[i]); cut++; } } (a[cut], a[hi]) = (a[hi], a[cut]); QuickSort(a, lo, cut - 1); QuickSort(a, cut + 1, hi); }
static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } static void quickSort(int[] a, int lo, int hi) { if (lo >= hi) return; int pivot = a[hi]; int cut = lo; for (int i = lo; i < hi; i++) { if (a[i] < pivot) swap(a, i, cut++); } swap(a, cut, hi); quickSort(a, lo, cut - 1); quickSort(a, cut + 1, hi); }