快速排序

来源:互联网 发布:卡密软件破解 编辑:程序博客网 时间:2024/06/16 16:02

快速排序

基本思想:找到一个合适的位置,对于k而言。它的左边的所有元素均比他小,右边的元素均比他大。

如何做到?

遍历数组,为方便直接设置k就是起始的那个元素,设置两个指针分别在头和尾,
如果进行偶数次交换(0算偶数次)那就让a[j]和k比,奇数次那就让a[i]和k比。

#include <iostream>using namespace std;void Swap(int & a, int & b){    int tmp;    tmp = a;    a = b;    b = tmp;}void QuickSort(int a[], int s, int e){    int k = a[s];    int i = s, j = e;    if(s >= e)        return;    while(i != j)//交换的目的是为了让k左边的元素小于k,k右边的元素大于k    {        while(i<j && a[j]>=k)//偶数次交换            j--;        Swap(a[i], a[j]);        while(i<j && a[i]<=k)//奇数次交换            i++;        Swap(a[i], a[j]);    }    QuickSort(a, s, i-1);//k左边排    QuickSort(a, i+1, e);//k右边排}//完了之后a[i] == kint a[] = { 93,27,30,2,8,12,2,8,30,89};int main(){    int size = sizeof(a) / sizeof(int);    QuickSort(a, 0, size-1);    for(int i=0; i<size; i++)        cout << a[i] << ",";    cout << endl;    return 0;}
0 0
原创粉丝点击