qsort1.c

来自「自己做的常用库和实现的数据结构。public domain.」· C语言 代码 · 共 307 行

C
307
字号
  #include   "stdafx.h"#include <iostream.h>#include <stack.h> #define MAX_SIZE      10using namespace std; typedef int elem;typedef std::stack<int> Stack; int partition(elem *pData, int low, int high);void swap(elem& a, elem& b);void qsort(elem* pData, int low, int high);void qsort2(elem* pData, int low, int high);void qsort3(elem* pData, int low, int high); int partition(elem *pData, int low, int high){       elem key = pData[low];        while(low < high)       {              while(low < high && pData[high] >= key)                     high--;               swap(pData[low], pData[high]);               while(low < high && pData[low] <= key)                     low++;               swap(pData[low], pData[high]);       }        return low;} void swap(elem& a, elem& b){       if(&a != &b)       {              a ^= b;              b ^= a;              a ^= b;       } }//这个是原始的算法 void qsort(elem* pData, int low, int high){       if(low < high)       {              int pivot = partition(pData, low, high);              qsort(pData, low, pivot - 1);              qsort(pData, pivot + 1, high);       }}//这个是第一次转化成递归以后的算法void qsort2(elem* pData, int low, int high){       Stack st;        if(low < high)       {              int pivot = partition(pData, low, high);              st.push(low);              st.push(pivot - 1);               st.push(pivot + 1);              st.push(high);                           while(!st.empty())              {                     high = st.top();                     st.pop();                     low = st.top();                     st.pop();                                         pivot = partition(pData, low, high);                                         if(low < high)                     {                            st.push(low);                            st.push(pivot - 1);                             st.push(pivot + 1);                            st.push(high);                     }              }       }}//这个是转化成递归以后改进的算法void qsort3(elem* pData, int low, int high){       Stack st;       int tmp;        if(low < high)       {              int pivot = partition(pData, low, high);              st.push(low);              st.push(pivot - 1);               st.push(pivot + 1);              st.push(high);                           while(!st.empty())              {                     high = st.top();                     st.pop();                     low = st.top();                     st.pop();                                         if(low < high)                     {                            pivot = partition(pData, low, high);                                                       tmp = pivot - 1;                            if(low < tmp)                            {                                   st.push(low);                                   st.push(tmp);                            }                             tmp = pivot + 1;                            if(tmp < high)                            {                                   st.push(tmp);                                   st.push(high);                            }                     }              }       }} //测试代码int _tmain(int argc, _TCHAR* argv[]){             elem data[MAX_SIZE] = {12, 1, 13, 14, 67, 23, 12, 3, 90, 76};       //qsort(data, 0, MAX_SIZE - 1);       //qsort2(data, 0, MAX_SIZE - 1);       qsort3(data, 0, MAX_SIZE - 1);             for(int i=0; i< MAX_SIZE; i++)       {              cout << data[i] << " ";       }        cout << endl;             cin.get();       return 0;} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?