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)
上一篇 2021年11月14日 上午7:00
下一篇 2021年11月14日 上午8:00


相关推荐

  • 用了vue还需要jquery吗_vue与react的区别

    用了vue还需要jquery吗_vue与react的区别⾸先呢jquery他是⽤js封装的⼀个类库,主要是为了⽅便操作dom元素,⽽vue他是⼀个框架,并且呢,他会从真实dom构建出⼀个虚拟的dom树,通过di!算法渲染只发⽣改变的dom元素,其他的相同的dom元素不⽤在重新渲染.⽽使⽤jquery去改变dom元素的时候,即使有相同的dom元素也会重新渲染,jq重点操作dom,而vue重点操作数据。以上就是我对vue和jquery区别的理解….

    2022年10月15日
    3
  • 数据结构:顺序表的基本操作

    数据结构:顺序表的基本操作线性表的顺序存储顺序表的线性存储示意图 C 语言定义线性表的顺序存储结构线性表的顺序存储 nbsp nbsp nbsp nbsp 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素 使得线性表在逻辑结构上相邻的元素存储在连续的物理存储单元中 即 通过数据元素物理存储的连续性来反应元素之间逻辑上的相邻关系 采用顺序存储结构存储的线性表通常简称为顺序表 nbsp nbsp nbsp nbsp 顺序存

    2026年3月18日
    1
  • Workbench中直接调用ICEM CFD进行网格划分「建议收藏」

    Workbench中直接调用ICEM CFD进行网格划分「建议收藏」Workbench中直接调用ICEMCFD进行网格划分自从ANSYS12.0之后,ICEMCFD就从Workbench中被分离出去,作为一个独立的程序使用了。取而代之的是Meshing模块。在Meshing的属性节点菜单中右键点击Mesh,选择Insert>Method,插入方法。选择需要划分网格的几何体,点击apply。此时Geometry显示为1Body。设置Method为MultiZone,如果不设置成这个的话,找不到进入ICEMCFD的入口。如果要划分四面体,

    2022年5月9日
    161
  • 瀑布式研发流程

    瀑布式研发流程

    2022年6月17日
    30
  • golang中的nil

    golang中的nil文章目录基本指针 sliceinterfa map func 基本 golang 中的关键词 nil 表示空 与其他语言中的 null 可能使用有较大区别 nil 甚至可以说不是 golang 中的关键词 而只是一个变量名 如下 builting go 的代码 varnilTypego 中针对不同的类型 nil 有不同的判空方式指针结论 当一个指针 所有值类型的指针 包括了 struct 没有指向任何值 那么它就可以等于 nil 下方代码给指针类型赋 nilvara

    2026年3月17日
    2
  • python中divmod函数的用法_Python中divmod函数的用法

    python中divmod函数的用法_Python中divmod函数的用法Python 中 divmod 函数的用法 语言 余数 是一种 面向对象 函数 Python 中 divmod 函数的用法 Python 中 divmod 函数的用法在 Python 中 divmod 函数的作用是把除数和余数运算结果结合起来 其用法为 divmod a b 其中 a 和 b 的类型都是数字类型 返回值为一个包含商和余数的元组 使用时该函数无需导入 可直接使用 PythonPython 是一个高层次的结合了解释性

    2025年12月3日
    8

发表回复

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

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