快速排序是一种分治算法。它是将一个数组分割成两个子数组,与归并排序不同的是:快速排序保证左边的数组元素都要小于右边的数组元素。
首先找到一个分割点,一般以数组的第一个元素作为这个分割点,先从左边往右边找。把比这个元素小的都放在左边,比它大的放在右边,然后又从右边往左边找。
当两个指针相遇时,我们只需要把该分割点的元素放到该位置即可(分割点)。
#include <iostream>
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;
}
网友评论