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 + -
显示快捷键?