快速排序非递归算法c语言实现,数据结构与算法----3.5 非递归的快速排序方法

[c++]代码库#include

using namespace std;

#include

using namespace std;

typedef int KeyType;

struct LElemType

{

KeyType key;

};

struct SElemType

{

int a;

int b;

};

struct SList

{

LElemType *r;

int length;

};

const int StackInitSize=10;

const int StackInc=15;

struct SStack

{

SElemType *base,*top;

int stacksize;

};

bool StackInit (SStack &S);//构造栈

bool Push(SStack &S,SElemType &e);//入栈

bool Pop(SStack &S,SElemType &e);//出栈

bool StackEmpty(SStack &S);//空栈

bool ListCreate(SList &L,int n,LElemType a[]);//创建顺序表

void Listshow(SList &L);//显示表

void quicksort(SList &L);//非递归的快速排序

void InsertSort(SList &L) ;

int Partition(SList &L, int a, int b);

int main()

{

const int i=13;

LElemType a[i]={3,7,1,5,9,6,4,10,15,12,14,19,16};

SList L;

ListCreate(L,i,a);

cout<

Listshow(L);

quicksort(L);

cout<

Listshow(L);

cout<

return 0;

}

bool ListCreate(SList &L,int n,LElemType a[])

{

int i;

L.r=new LElemType[n];

if(!L.r)return false;

L.length=n;

for(i=0;i

{

L.r[i]=a[i];

}

return true;

}

void Listshow(SList &L)

{

int i=L.length;

for(int j=0;j

{

cout<

}

}

bool StackInit (SStack &S)

{

S.base=new SElemType[StackInitSize];

if(!S.base) return false;

S.top=S.base;

S.stacksize=StackInc;

return true;

}

bool StackEmpty(SStack &S)

{

return S.top==S.base;

}

bool Push(SStack &S,SElemType &e)

{

SElemType *base;

if(S.top-S.base==S.stacksize)

{

base=(SElemType*)realloc(S.base,(S.stacksize+StackInc)*sizeof(SElemType));

if(!base) return false;

S.base=base;

S.top=S.base+S.stacksize;

S.stacksize+=StackInc;

}

*S.top=e;

S.top++;

return true;

}

bool Pop(SStack &S,SElemType &e)

{

if(S.top==S.base) return false;

S.top--;

e=*S.top;

return true;

}

int Partition(SList &L, int a, int b)

{

LElemType x = L.r[a];

while (a < b) {

while (a < b && L.r[b].key >= x.key) {

b--;

}

L.r[a] = L.r[b];

while (a < b && L.r[a].key <= x.key) {

a++;

}

L.r[b] = L.r[a];

}

L.r[a] = x; return a;

}

void quicksort(SList &L)

{

SStack S; StackInit(S);

SElemType e, p;

e.a = 0; e.b = L.length-1;

Push(S, e); int t;

while (Pop(S, e)) {

if (e.b-e.a<7) {

continue;

}

t = Partition(L, e.a, e.b);

p.a = e.a; p.b = t - 1;

Push(S, p);

p.a = t + 1; p.b = e.b;

Push(S, p);

}

InsertSort(L);

}

void InsertSort(SList &L)

{

int i, j; LElemType x;

for (i = 1; i < L.length; i++) {

for (x = L.r[i], j = i - 1; j >= 0 && x.key < L.r[j].key; j--) {

L.r[j + 1] = L.r[j];

}

L.r[j + 1] = x;

}

}

694748ed64b9390909c0d88230893790.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++类中成员变量的初始化总结

C类中成员变量的初始化总结 1. 普通的变量&#xff1a; 一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。 1 class CA 2 { 3 public: 4 int data; 5 public: 6 CA(); 7 }; 8 9 CA::CA():data(0) //……#1……

今天把房子定下来了

今天同学L跟我说&#xff0c;今天付了定金&#xff0c;把买房子的事给定下了。先说下疫情这两年的房价在疫情之前&#xff0c;2019年那时候&#xff0c;深圳经历了一波房价上涨&#xff0c;那时候的房价上涨是我完全没有预料到的&#xff0c;但是在2015年房价的那一波房价上涨&…

android群英传 自定义滑动view,Android群英传学习之路-View的滑动

滑动效果是如何产生的&#xff1f;滑动一个View从本质上来说就是移动一个View&#xff0c;改变其当前的坐标。所以&#xff0c;想要滑动一个View&#xff0c;就必须监听该View的触摸事件&#xff0c;并且根据事件的坐标&#xff0c;不断的改变View的坐标从而实现View的滑动。An…

艹,正则表达式!

大家好&#xff0c;我是球哥&#xff0c;转发良许同学的一篇文章。不知道大家有没有被正则表达式支配过的恐惧&#xff1f;看着一行火星文一样的表达式&#xff0c;虽然每一个字符都认识&#xff0c;但放在一起直接就让人蒙圈了~你是不是也有这样的操作&#xff0c;比如你需要使…

Linux Centos安装步骤

在虚拟机VMware10上安装Centos系统步骤 &#xff08;1)首先需要创建一个虚拟机&#xff0c;选择操作系统&#xff0c;进行一系列的硬件配置&#xff0c;选择Centos系统镜像 虚拟机创建完成 虚拟机创建完成后&#xff0c;重新启动虚拟机&#xff0c;就会自动开始安装CentOS系统的…

通信PK电子,谁牛?

工程师很多都有强迫症&#xff0c;有的是拆解强迫症&#xff0c;有的是排线布线强迫症&#xff0c;至今还记得第一堂焊电路板的课上&#xff0c;有同学把跳线排排焊&#xff0c;期末考获得了光荣的A。论起排线布线的手艺&#xff0c;早前&#xff0c;德国弱电工程师的完美布线让…

[机器视觉] SIFT特征-尺度不变特征理解

SIFT特征-尺度不变特征理解 简介 SIFT&#xff0c;即尺度不变特征变换&#xff08;Scale-invariant feature transform&#xff0c;SIFT&#xff09;&#xff0c;是用于图像处理领域的一种描述。这种描述具有尺度不变性&#xff0c;可在图像中检测出关键点&#xff0c;是一种局…

harmonyos手机开发者beta,HarmonyOS 手机应用开发者 Beta 版到来,对开发者意味着什么...

北京时间12月16日&#xff0c;HarmonyOS手机开发者Beta活动在北京国贸开启&#xff0c;这场活动现场的人潮涌动也足以说明一切——用户和开发者对HarmonyOS手机应用开发者Beta版期待已久。作者 | 贾凯强头图 | 华为官方提供打破手机单设备限制&#xff0c;为万物互联而生在活动…

你确定不反编译 likely 看看?

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;下面推荐飞哥的一篇文章&#xff0c;觉得对大家很有帮助&#xff0c;希望大家先看看再扔到收藏夹吃灰&#xff0c;转发不转发看大爷们心情咯&#xff01;今天我给大家分享一个内核中常用的提升性能的小技巧。理解了它对你一…

看完这篇文章,会让你对电容的作用更明白!

电容是电路设计中最为普通常用的器件&#xff0c;是无源元件之一&#xff0c;有源器件简单地说就是需能(电)源的器件叫有源器件&#xff0c;无需能(电)源的器件就是无源器件。电容的作用和用途一般都有好多种&#xff0c;如&#xff1a;在旁路、去耦、滤波、储能方面的作用&…

华为mate40pro 升级鸿蒙,华为Mate40Pro再次曝光,麒麟9000+可升级到鸿蒙OS,这才是华为...

原标题&#xff1a;华为Mate40Pro再次曝光&#xff0c;麒麟9000可升级到鸿蒙OS&#xff0c;这才是华为在如今的手机市场&#xff0c;创新和差异化的设计已经成为消费者最在意的地方&#xff0c;所以加大技术创新和研发投入才是手机厂商们谋求发展的唯一道路。华为手机是一个大家…

10年深圳,回去了

十年前&#xff0c;2012年&#xff0c;我们毕业。毕业后&#xff0c;我们很多人都选择来深圳&#xff0c;那时候的想法很简单&#xff0c;深圳有我们想要的工作&#xff0c;我们很多人都是村里来的孩子&#xff0c;没有背景&#xff0c;家里也没有矿。考不上公务员也不想去做老…

android studio导入eclipse项目各种问题,Android | 导入Eclipse项目到Android studio的问题解决全过程...

D老师今天给了一个Android项目&#xff0c;但是他当时(2015年)用的是eclipse写的而我用的是Android studio&#xff0c;所以在导入项目的过程中出现了一些常见的问题&#xff0c;在这里总结一下解决的问题的过程。1.eclipse项目导入到Android studio的过程&#xff1a;File->…

蜡烛节能车模

❝简 介&#xff1a; 本文给出了几款使用蜡烛驱动的车模。关键词&#xff1a; 蜡烛&#xff0c;车模01 蜡烛车模1.1 蜡烛光电池点上蜡烛就能跑&#xff0c;DIY制作玩具汽车小模型The Energy of the Candle. Car Model[4]▲ 图1.2 蜡烛驱动的智能车模▲ 图1.1.3 光电池车模▲ …

Xen Desktop测试报告

Xen Desktop测试报告 &#xff08;九叔最近写的一个测试报告&#xff0c;仅供参考&#xff0c;可能结论不适合你们公司&#xff09; 目的 测试目的&#xff1a;本次测试周期耗时两周&#xff08;2011.11.14-2011.11.24&#xff09;&#xff0c;主要为了理解思杰的桌面虚拟化&am…

Linux基础提高_系统性能相关命令

w 看系统的负载信息 用于显示已经登陆系统的用户列表&#xff0c;并显示用户正在执行的指令 uptime [rootlocalhost]#uptime 17:26:07 up 9:02, 3 users, load average: 0.00, 0.00, 0.00 能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为…

去广州见了我大学老师标哥

标哥是我的大学老师。标哥也是我们很多学生公认上课非常好的老师&#xff0c;最近标哥突然想见见我这个年轻仔&#xff0c;让我去广州见见他&#xff0c;当然&#xff0c;并不是说他不能来深圳&#xff0c;见面的时候标哥特意给我们解释了一遍&#xff0c;我肯定是能理解他的良…

说好的薪资统计

本来是不想把最后的统计发出来的&#xff0c;但是后台很多同学都想看看嵌入式的薪资&#xff0c;我自己也答应了会发出来&#xff0c;所以趁着这个假期再发一次&#xff0c;也让大家做个参考。不想发的原因是因为担心有别有用心的人拿这个薪资来做比较&#xff0c;多少会让大家…

STL面试题

http://blog.csdn.NET/tianya_team/article/details/50753759 1.说说std::vector的底层&#xff08;存储&#xff09;机制。 vector就是一个动态数组&#xff0c;里面有一个指针指向一片连续的内存空间&#xff0c;当空间不够装下数据时&#xff0c;会自动申请另一片更大的空间…

实现IButtonControl接口时, PerformClick()方法的代码怎么写,请高手指导!

在做WinForm时&#xff0c;想做一个像Asp.Net里的ImageButton的控件&#xff0c;于是自己写了一个自定义控件&#xff0c;名为&#xff1a;ImageButton&#xff0c;继承PictureBox类&#xff0c;并实现IButtonControl接口&#xff0c;但是实现IButtonControl接口时必须重写IBut…