博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序递归和非递归实现
阅读量:5861 次
发布时间:2019-06-19

本文共 2316 字,大约阅读时间需要 7 分钟。

1 #include
2 #include
3 using namespace std; 4 void QSort(int*p, int left,int right) 5 { 6 if(left>=right) 7 return; 8 int i,j; 9 int key=p[left];10 i=left;11 j=right;12 while(i
=key)15 j--;16 p[i]=p[j];17 while(i
<=key)18 i++;19 p[j]=p[i]; 20 }21 p[i]=key;22 QSort(p,left,i-1);23 QSort(p,i+1,right);24 }25 26 void QuickSort(int* p,int left,int right)27 {28 //QSort(p,left,right);29 stack
is;30 is.push(left);31 is.push(right);32 while(!is.empty())33 {34 int j=is.top();is.pop();35 int i=is.top();is.pop();36 right=j;37 left=i;38 if(i>=j)39 continue;40 int key=p[i];41 while(i
=key)44 j--;45 p[i]=p[j];46 while(i
<=key)47 i++;48 p[j]=p[i];49 }50 p[i]=key;51 is.push(left);is.push(i-1); 52 is.push(i+1);is.push(right);53 }54 }55 int main()56 {57 int a[]={ 5,1,2,0,6,9,4};58 QuickSort(a,0,6);59 for(int i=0;i<7;i++)60 printf("%d ",a[i]);61 return 0;62 }
View Code

其实递归是一种栈的表达。

就像树本质上是一种递归结构。要抓住本质。

合理选取枢纽元的快排程序(比上面的快排平均要快5%),以及当数组元素个数小于等于3时用插入排序进行。

1 void  Qsort(int A[], int Left, int Right )  2 {    3     int  i, j;  4     int Pivot;  5     int Cutoff=3; 6     if(Left<=Right-Cutoff) //为什么不用Left+Cutoff<=Right ? 考虑溢出处理 7     {  /* if the sequence is not too short */ 8         Pivot = Median3(A,Left,Right);  /* select pivot */ 9         i = Left+1;     10         j = Right – 2; 11         for(;;) 12         { 13          while (i
= Pivot ) {j--;} /* scan from right */15 if (i
A[ Center ] ) 33 swap(A[ Left ],A[ Center ] ); 34 if ( A[ Left ] > A[ Right ] ) 35 swap(A[ Left ], A[ Right ] ); 36 if ( A[ Center ] > A[ Right ] ) 37 swap( A[ Center ], A[ Right ] ); 38 /* Invariant: A[ Left ] <= A[ Center ] <= A[ Right ] */ 39 swap(A[ Center ], A[ Right - 1 ] ); /* Hide pivot */ 40 /* only need to sort A[ Left + 1 ] … A[ Right – 2 ] */41 return A[ Right - 1 ]; /* Return pivot */ 42 }
View Code

 

转载于:https://www.cnblogs.com/vaecn/p/5398739.html

你可能感兴趣的文章
Bootstrap框架
查看>>
display属性详解
查看>>
网络编程socket-采用TCP协议通信
查看>>
Linux网络设置
查看>>
C#制做Activber控件
查看>>
面向对象的编程(一)
查看>>
JavaScript核心基础语法
查看>>
JDBC连接执行MySQL存储过程报权限错误
查看>>
BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
查看>>
Gym 100952E&&2015 HIAST Collegiate Programming Contest E. Arrange Teams【DFS+剪枝】
查看>>
Hibernate4.3 QBC查询
查看>>
通过 Code First 开发建立新数据库
查看>>
RabbitMQ None of the specified endpoints were reachable
查看>>
the bundle at bundle path is not signed using an apple submission certificate
查看>>
oc之可变字典创建 添加 删除 遍历
查看>>
“由俭入奢易,由奢入俭难”,记我的编程语言学习
查看>>
黄聪:PHP json_encode中文乱码解决方法
查看>>
.net扩展方法
查看>>
【Java】用 static 修饰变量时应该注意的问题
查看>>
SQL简繁转换函数
查看>>