快速排序

     首先选定一个数为基准数,先对这个数进行归位。即从数列右边、左边分别开始(注意顺序,先右后左),从右向左寻找比基准数小的数,从左向右寻找比基准数大的数(且要保证右边的序数 j 大于左边的序数 i ),分别找到之后,对两数进行交换,如此循环,直到 i 等于 j。循环结束之后,将 i 位置的数与基准数进行交换。最后,运用递归,再对已经归位的基准数左右两边进行排序。具体同上。


 

例:对数列{6, 1, 2, 7, 9, 3, 4, 5, 10, 8}进行从小到大对排序。

#include <iostream>
using namespace std;

int a[100] {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};

int main(void)
{
    void func(int, int);
    
    func(0, 9);
    
    for(int i = 0; i < 10; i++) {
        cout << a[i] << ' ';
    }
    
    return 0;
}


void func(int left, int right)
{
    if(left > right)
        return;
    
    int i = left, j = right, temp = a[left], t;
    
    while(i != j)   {
        while(j>i && a[j]>=temp)
            j--;
        
        while(i<j && a[i]<=temp)
            i++;
        
        if(i < j)   {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    
    a[left] = a[i];
    a[i] = temp;
    
    func(left, i-1);
    func(i+1, right);
    
    return;
}

 

posted @ 2017-03-13 22:35  limyel  阅读(140)  评论(0)    收藏  举报