快速排序的递归和非递归的实现

来源:互联网 发布:lgd和淘宝 编辑:程序博客网 时间:2024/05/20 06:09
struct QuickS{    int low;    int high;};int Partition(int *arr,int st,int ed){//快速排序的划分    int pos = arr[st];    while(st < ed){        while(arr[ed] > pos && st < ed) ed --;        arr[st] = arr[ed];        while(arr[st] <= pos && st < ed) st ++;        arr[ed] = arr[st];    }    arr[st] = pos;    return st;}void QuickSort(int *arr,int st,int ed){//快速排序的递归算法    if(st < ed){        int pos = Partition(arr,st,ed);        QuickSort(arr,st,pos-1);        QuickSort(arr,pos+1,ed);    }}void QuickSortN(int *arr,int low,int high){//快速排序的非递归算法    stack<QuickS> S;    QuickS p,q;    p.low = low;p.high = high;S.push(p);    while(!S.empty()){        q = S.top();        S.pop();        if(q.low < q.high){            int pos = Partition(arr,q.low,q.high);            p.low = q.low;p.high = pos - 1;S.push(p);            p.low = pos + 1;p.high = q.high;S.push(p);        }    }}

0 0
原创粉丝点击