快速排序

快速排序对包含n个数的输入数组,最坏情况运行时间为Θ(n2), 但快速排序通常是用于排序的最佳的实用选择,

这是因为其平均性能相当好:期望的运行时间为Θ(nlgn), 且Θ(nlgn)记号中隐含的常数因子很小,另外它还能

进行就地排序。

伪码:

QUICKSORT(A, p, r)
  if p < r
    then q ← PARTITION(A, p, r)
      QUICKSORT(A, p, q - 1)
      QUICKSORT(A, q + 1, r)

数组划分:

PARTITION(A, p, r)
  x ← A[r]
  i ← p - 1
  for j ← p to r - 1
    do if A[j] <= x
      then i ← i + 1
        exchange A[i] ↔ A[j]
  exchange A[i + 1] ↔ A[r]
  return i + 1

Java实现:

    public void quickSort(int[] a, int p, int r)
    {
        if (p < r)
        {
            int q = partition(a, p, r);
            quickSort(a, p, q - 1);
            quickSort(a, q + 1, r);
        }
        
    }
    
    private int partition(int[] a, int p, int r)
    {
        int x = a[r];
        int i = p - 1;
        for (int j = p; j < r; j++)
        {
            if (a[j] <= x)
            {
                i = i + 1;
                swap(a, i, j);
            }
        }
        swap(a, i + 1, r);
        return i + 1;
    }
    
    private void swap(int[] data, int src, int des)
    {
        int tmp = data[des];
        data[des] = data[src];
        data[src] = tmp;
    }
原文地址:https://www.cnblogs.com/zhuqiang/p/2486017.html