快速排序实现

// Type your C++ code and click the "Run Code" button!
// Your code output will be shown on the left.
// Click on the "Show input" button to enter input data to be read (from stdin).

#include <iostream>
#include<ctime>
#include<cstdlib>
using namespace std;

void swap( int &a, int &b)
{
    int tmp;
    tmp=a;
    a=b;
    b=tmp;
}

int RandInRange( int start, int end )
{
    srand(time(NULL));
    return start + rand()%(end-start+1);
}

int Partition( int data[],int length, int start, int end)
{
    if( data==NULL || length<=0 || start <0 || end >= length)
    {
        cout<<"形参不合理!"<<endl;
        exit(0);
    }
    
    int index=RandInRange(start,end);
    swap(data[index],data[end]);
    
    int lower=start-1;
    for( index=start; index < end; ++index )
    {
        if( data[index] < data[end] )
        {
            ++lower;
            if(lower != index )
            {
                swap(data[lower],data[index]);
            }
        }
    }
    ++lower;
    swap(data[lower],data[end]);
    return lower;
}

void qsort( int data[],int length,int start,int end )
{
    
    if(start == end)
    return;
    
    int index = Partition(data,length,start,end);
    if( index >start )
        qsort(data,length,start,index-1);
    if( index < end )
        qsort(data,length,index+1,end);
    
}
int main() {
    // Start typing your code here...
    cout << "Hello world!" << endl;
    int data[5]={6,7,5,3,2};
    qsort(data,5,0,4);
    for( int i=0; i< 5;i++)
    {
        cout<<data[i]<<endl;
    }
    
    return 0;
}

  

posted @ 2013-07-18 17:19  NinaGood  阅读(172)  评论(0编辑  收藏  举报