Iterative (non-recursive) Quick Sort

Iterative (non-recursive) Quick Sort

An iterative way of writing quick sort:

#include <iostream>
#include <stack>
#include <utility>
using namespace std;

void quickSort(int A[], int n) {
	stack<pair<int, int>> stk;
	stk.push(make_pair(0, n-1));
	while (!stk.empty()) {
		pair<int, int> p = stk.top();
		stk.pop();
		int r = rand() % (p.second-p.first+1) + p.first;
		swap(A[r], A[p.first]);
		int j = p.first;
		for (int i=p.first+1; i<=p.second; ++i) {
			if (A[i] < A[p.first]) swap(A[++j], A[i]);
		}
		swap(A[p.first], A[j]);
		if (j-1 > p.first) stk.push(make_pair(p.first, j-1));
		if (j+1 < p.second) stk.push(make_pair(j+1, p.second));
	}
}

int main() {
	int A[8] = {4, 3, 5, 2, 1, 3, 2, 3};
	quickSort(A, 8);
	for (int i=0; i<8; ++i) cout<<A[i]<<" ";
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119221.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【JVM调优工具】JVM调优工具[通俗易懂]

    【JVM调优工具】JVM调优工具[通俗易懂]一、JVM调优工具1.jstat工具java程序默认使用的xmx_为什么JAVA进程占用内存会超过Xmx设置_保瓶儿的博客-CSDN博客

    2022年5月31日
    26
  • dtu连接mysql_Azure SQL 数据库中的DTU和eDTU是什么

    dtu连接mysql_Azure SQL 数据库中的DTU和eDTU是什么AzureSQL数据库中的DTU和eDTU是什么03/07/20177分钟可看完本文内容MaxShen沈云技术解决方案专家AzureSQL使用了数据库事务单位(DTU)和弹性数据库事务单位(eDTU)来作为一个计量单位。但是DTU和eDTU究竟是什么?在官方文档中是这样解释的:DTU是一个资源度量单位,表示保证可用于单一数据库服务层内特定性能级别的单个AzureSQL…

    2025年6月13日
    1
  • IPtables中SNAT、DNAT和MASQUERADE的含义

    IPtables中SNAT、DNAT和MASQUERADE的含义IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNAT和DNAT。SNAT是sourcenetworkaddresstranslation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访

    2022年6月15日
    30
  • sublime text3 2021激活码【在线注册码/序列号/破解码】

    sublime text3 2021激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    42
  • BigDecimal类型 比较大小的方法[通俗易懂]

    BigDecimal类型 比较大小的方法[通俗易懂]1.转成intBigDecimalb1=newBigDecimal(“-121454125453.145”);if(b1.intValue()<0){ System.out.println(“金额为负数!”); System.out.println(b1);}2.compareTo方法结果是:-1:小于;0:等于;1:大于;BigDecimalb1=newBigDecimal(“-121454125453.145”);if(b1.compar

    2022年7月14日
    35
  • html段落首行缩进两字符_css设置首行缩进

    html段落首行缩进两字符_css设置首行缩进段落前面空两个字的距离,不要再使用空格了,用CSS实现段落首缩进两个字符。应该使用首行缩进text-indent。text-indent可以使得容器内首行缩进一定单位。比如中文段落一般每段前空两个汉字

    2022年8月4日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号