快速排序

快速排序是一种分治算法。它是将一个数组分割成两个子数组,与归并排序不同的是:快速排序保证左边的数组元素都要小于右边的数组元素。

首先找到一个分割点,一般以数组的第一个元素作为这个分割点,先从左边往右边找。把比这个元素小的都放在左边,比它大的放在右边,然后又从右边往左边找。
当两个指针相遇时,我们只需要把该分割点的元素放到该位置即可(分割点)。

#include 
using namespace std;

void quikSort(int a[], int begin, int end){
    if(begin >= end)return;
    int i = begin;
    int j = end;
    int key = a[i];
    while(i < j){
        while(a[j] >= key && j > i)j--;
        a[i] = a[j];
        while(a[i] <= key && j > i)i++;
        a[j] = a[i];
    }
    a[i] = key;
    quikSort(a, begin, i - 1);
    quikSort(a, i + 1, end);
}

int main(){
    int a[10] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
    quikSort(a, 0, 9);
    return 0;
}

你可能感兴趣的:(快速排序)