【快速排序】

 

 

1. 写一个数组,第一个数作为基准X

2. 指针i,指向左边,j指向右边。

3. 从j开始,找到小于X的数,放在a[i],也就是,如果a[j]> X, j--; a[i++]=a[j];

4. 现在,i已经向右挪动了一个。从i开始,向右找到大于X的数,放在a[j],也就是, 如果a[i]<X, i++; a[j--]=a[i];

5. 重复2-4,一直到i==j,这时候,a[i]=a[j]的左边都小于X,右边都大于X。令a[i]=X;

6. 递归调用

#include <iostream>
#include <stdio.h>

using namespace std;

void quickSort(int a[], int l, int r){
    if (l < r)
    {
        int i = l, j = r;
        int x = a[l];//挖出来第一个坑
        while (i < j){
            while (i<j && a[j] >= x)
                j--;
            if (i<j)
                a[i++] = a[j];

            while (i < j && a[i] < x)
                i++;
            if (i<j)
                a[j--] = a[i];
        }
        a[i] = x;

        quickSort(a, l, i - 1);
        quickSort(a, i+1, r);
    }
}
int main(){
    int data[] = { 5, 4, 2, 1, 3, 8,11,9,10 };

    quickSort(data, 0, 8);
    for (int i = 0; i < 9;i++)
        cout << data[i] << endl;
    system("pause");
    return 0;
}

 

上图来自:http://blog.csdn.net/wuxinyicomeon/article/details/5996675

 

posted @ 2017-03-21 22:27  xy123001  阅读(163)  评论(0编辑  收藏  举报