排序---快速排序

来源:互联网 发布:weblogic内存溢出linux 编辑:程序博客网 时间:2024/06/03 09:27
#include <iostream>#include <stack>using namespace std;//快速排序void myprintf(int *arr,int length){    for(int i=0;i<length;i++)    {        cout<<arr[i]<<" ";    }    cout<<endl;}static int  Partition(int *arr,int low,int hight){    if(arr == NULL || low<0 || hight < 0)    {        throw new exception("Invalid Parameters");    }    //基准    int tmp = arr[low];    while(low <hight)    {        //尾部开始找到第一个比基准小的数        while(low<hight && arr[hight]>=tmp)        {            hight--;        }        if(low == hight)        {            break;        }        else        {            arr[low] = arr[hight];        }        //从头找到第一个比基准大的数        while(low<hight  && arr[low]<=tmp)        {            low++;        }        if(low == hight)        {            break;        }        else        {            arr[hight] = arr[low];        }    }    arr[low] = tmp;    return low;}void Quick(int *arr,int low,int hight){    if(low == hight)    {        return;    }    int index = Partition(arr,low,hight);    if(index > low)    {        Quick(arr,low,index-1);    }    if(index < hight)    {        Quick(arr,index+1,hight);    }}//用递归来解决问题void QuickSort(int *arr,int length){    Quick(arr,0,length-1);}//用栈来模拟递归的过程void QuickSort2(int *arr,int length){    if(arr == NULL || length<=0)    {        throw new exception("Invalid Parameters");    }    stack<int> vec;    int low = 0;    int hight = length-1;    int index = Partition(arr,low,hight);    if(index > low)    {        vec.push(low);        vec.push(index-1);    }    if(index < hight)    {        vec.push(index+1);        vec.push(hight);    }    while(!vec.empty())    {        hight = vec.top();        vec.pop();        low = vec.top();        vec.pop();        index = Partition(arr,low,hight);        if(index > low)        {        vec.push(low);        vec.push(index-1);        }        if(index < hight)        {        vec.push(index+1);        vec.push(hight);        }    }}int main(){    int arr[]= {6,3,7,8,2,5,1,9};    myprintf(arr,sizeof(arr)/sizeof(arr[0]));    QuickSort2(arr,sizeof(arr)/sizeof(arr[0]));    cout<<"-----------------"<<endl;    myprintf(arr,sizeof(arr)/sizeof(arr[0]));}
原创粉丝点击