快速排序的非递归实现(栈)
来源:互联网 发布:由于网络原因上传失败 编辑:程序博客网 时间:2024/06/01 07:57
/* *快速排序非递归基本思想: * 将每一段的头和尾放在栈中,在逐步出栈。 * 首先先建一个栈或者调用STL(标准模板库)中 * 栈函数。在<stack.h>头文件中。*/#include <iostream>#include <stack>#include <iomanip>using namespace std;#define Size 20typedef int DataType;typedef int Position;int GetPositon(DataType digit[], const int low, const int high);void QuickSortStack(DataType digit[], const int low, const int high);void PaintQuickSort(DataType digit[], const int lengthOfDigit);int main(void){DataType digit[Size] = {23, 25, 45, 78, 89,12, 45, 65, 43, 32,98, 54, 32, 54, 32,21, 34, 54, 22, 34};PaintQuickSort(digit, Size);QuickSortStack(digit, 0, Size-1);PaintQuickSort(digit, Size);return 0;}int GetPositon(DataType digit[], const int low, const int high){Position i = low;Position j = high;DataType temp = digit[low];//取最小值作为标准值 while(i < j){//当i == j时退出while(i < j && temp < digit[j]) j--;//在标准值的右侧扫描if(i < j){digit[i] = digit[j];i++;}while(i < j && temp > digit[i]) i++;//在标准值的左侧进行扫描if(i < j){digit[j] = digit[i];j--;}}digit[i] = temp;// digit[j] = temp 也可以return i;//return j;都可以因为 i == j}void QuickSortStack(DataType digit[], const int low, const int high){stack<DataType> st;Position mid;if(low < high){mid = GetPositon(digit, low, high);//这几步是在设置第一步操作if(low < mid) //{ //st.push(low); //st.push(mid-1); // } //if(mid < high) //这几步是在设置第一步操作{ //st.push(mid+1); //st.push(high); //} //while(!st.empty() && st.size() %2 == 0)//栈中元素以成对存在的{ Position top = st.top();//取出高端 st.pop(); Position bottom = st.top();//取出低端 st.pop(); mid = GetPositon(digit, bottom, top); if( bottom < mid) { st.push(bottom); st.push(mid-1); } if( mid < top) { st.push(mid+1);st.push(top); }}}}//输出void PaintQuickSort(DataType digit[], const int lengthOfDigit){for(int i = 0; i < lengthOfDigit; i++)cout<<digit[i]<<" ";cout<<endl<<endl;}
0 0
- 快速排序的非递归实现(栈)
- 快速排序实现(递归+非递归)
- 快速排序的非递归实现
- php的非递归快速排序实现
- 非递归的快速排序实现(转)
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现代码
- 快速排序的非递归实现
- 快速排序算法的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- 快速排序的非递归实现
- Nodejs系列-2 websocket
- 二叉树C#实现----MSDN链接
- poj3252stars
- Unity3D技术之多玩家联网游戏创建说明
- table表头列头固定(css实现)
- 快速排序的非递归实现(栈)
- 集合框架篇2 Collection
- Java中的==和equals区别
- 图像像素操作
- Swing动画之敌机工厂
- 《linux命令行大全》读书笔记 第六章 重定向
- iOS开发中不可错过的十大第三方类库
- cocos2d-x环境搭建 window+eclipse+ndk
- UVA - 10057 A mid-summer night's dream.