快速排序算法的非递归实现
来源:互联网 发布:nc 发送tcp数据 编辑:程序博客网 时间:2024/05/10 13:23
#define push(a,n) a[--a[0]]=n
#define pop(a,n) n=a[a[0]++]
#define SWAP(a,b) {int temp=a;a=b;b=temp;}
#include <stdio.h>
#include <cstring>
int log2(int n){
int count=0;
while(n){
count++;
n >>=1;
}
return count;
}
template<typename T>
int partionsort(T *seq,int start,int end){
if(0==seq||start>=end) return -1;
int i=start,j=end;
while(i<j){
while(i<=end&&seq[i]<=seq[start]) i++;
while(j>=start&&seq[j]>seq[start])j--;
if(i<j)
SWAP(seq[i],seq[j]);
}
SWAP(seq[start],seq[j]);
return j;
}
template<typename T>
void mquicksort(T * seq,int start,int end){
if(0==seq||start>=end) return ;
int stack_size=end-start+1;
unsigned char *mstack=new unsigned char[(stack_size+2)];//用于存放轴值
memset(mstack,0,(stack_size+2)*sizeof(char));
mstack[0]=stack_size+1;
int h=start,r=end+1;
while(h<=end){
while(h<r){
push(mstack,r);
r=partionsort<T>(seq,h,r-1);
}
pop(mstack,r);
if((r-h)==1){
h=r+1;
pop(mstack,r);
while(h==r) pop(mstack,r);
}
else
h++;
}
}
void main(){
//int a[]={5,3,2,9,6,1,4,8,7};
//int a[]={9,8,9,7,6,2,5,4,7,3,2,1};
//int a[]={1,2,3,4,5,6,7,8,9};
//int a[]={9,8,7,6,5,4,3,2,1};
int a[]={9,9,8,8,7,7,6,6,5,5,4,4,3,3,2,2,1,1};
mquicksort<int>(a,0,sizeof(a)/sizeof(int)-1);
for(int i = 0; i < sizeof(a)/sizeof(int); ++i)
{
printf("%d ", a[i]);
}
getchar();
}
#define pop(a,n) n=a[a[0]++]
#define SWAP(a,b) {int temp=a;a=b;b=temp;}
#include <stdio.h>
#include <cstring>
int log2(int n){
int count=0;
while(n){
count++;
n >>=1;
}
return count;
}
template<typename T>
int partionsort(T *seq,int start,int end){
if(0==seq||start>=end) return -1;
int i=start,j=end;
while(i<j){
while(i<=end&&seq[i]<=seq[start]) i++;
while(j>=start&&seq[j]>seq[start])j--;
if(i<j)
SWAP(seq[i],seq[j]);
}
SWAP(seq[start],seq[j]);
return j;
}
template<typename T>
void mquicksort(T * seq,int start,int end){
if(0==seq||start>=end) return ;
int stack_size=end-start+1;
unsigned char *mstack=new unsigned char[(stack_size+2)];//用于存放轴值
memset(mstack,0,(stack_size+2)*sizeof(char));
mstack[0]=stack_size+1;
int h=start,r=end+1;
while(h<=end){
while(h<r){
push(mstack,r);
r=partionsort<T>(seq,h,r-1);
}
pop(mstack,r);
if((r-h)==1){
h=r+1;
pop(mstack,r);
while(h==r) pop(mstack,r);
}
else
h++;
}
}
void main(){
//int a[]={5,3,2,9,6,1,4,8,7};
//int a[]={9,8,9,7,6,2,5,4,7,3,2,1};
//int a[]={1,2,3,4,5,6,7,8,9};
//int a[]={9,8,7,6,5,4,3,2,1};
int a[]={9,9,8,8,7,7,6,6,5,5,4,4,3,3,2,2,1,1};
mquicksort<int>(a,0,sizeof(a)/sizeof(int)-1);
for(int i = 0; i < sizeof(a)/sizeof(int); ++i)
{
printf("%d ", a[i]);
}
getchar();
}
- 快速排序算法的非递归实现
- 快速排序的非递归算法实现
- 非递归实现快速排序算法
- 快速排序非递归算法的java实现
- 快速排序的非递归算法
- 非递归的快速排序算法
- 快速排序的非递归算法
- 非递归的快速排序算法
- 三种快速排序算法的实现(递归算法、非递归算法、三路划分快速排序)
- 三种快速排序算法的实现(递归算法、非递归算法、三路划分快速排序)
- 三种快速排序算法的实现(递归算法、非递归算法、三路划分快速排序)
- 快速排序算法递归与非递归实现
- 快速排序算法递归和非递归实现 [# 29]
- 快速排序的非递归实现
- php的非递归快速排序实现
- 非递归的快速排序实现(转)
- 快速排序的非递归实现
- 快速排序的非递归实现
- poj1008 Maya Calendar
- 使用shell关闭占用某一个端口的程序
- Hdu 4565 So Easy! (数学 构造矩阵)
- C++代码报错分析:expression cannot be evaluated
- 黑马程序员-JavaScript获取HTML DOM节点元素的方法的总结
- 快速排序算法的非递归实现
- 数据库基础知识
- JSON与XML的区别比较
- Struts 的数据校验和验证框架
- 在Ubuntu下使用搜狗输入法
- 按段分组
- 1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=n(n+1)(n+2)/6
- 文本框提示问题
- 退役贴--湖南省第九届程序设计竞赛后 2013年10月13