[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;

}

}

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

  1. 快速排序的递归算法C语言

    下面展示快速排序的递归算法 C语言 Dev-C++ 算法思路是:添加一个基准数k和一头一尾的两个伪指针i和j. 一般将第一个元素首先作为基数k,即k=a[1].每一趟的目的是,让基数左边的数都小于(大 ...

  2. 13:Scala语言的数据结构和算法

    第十九章 Scala语言的数据结构和算法 19.1 数据结构(算法)的介绍 数据结构的介绍   1.数据结构是一门研究算法的学科,只从有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮.更加 ...

  3. 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作

    大数据技术之_16_Scala学习_13 第十九章 Scala语言的数据结构和算法 19.1 数据结构(算法)的介绍 19.2 看几个实际编程中遇到的问题 19.2.1 一个五子棋程序 19.2.2 ...

  4. 算法java语言描述_java语言描述数据结构与算法崔笑颜的博客

    java语言描述数据结构与算法崔笑颜的博客 冒泡排序 插入排序 选择排序 希尔排序 快速排序 归并排序 二分查找package com.demo.test; import java.util.Arra ...

  5. 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并

    数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并 第一章 冒泡排序 [1]Bubble_Sort.c 第二章 快速排序 [1]quick_sort.c 第三章 大数据 ...

  6. 数据结构与算法(python)递归:找零问题

    参考自 MOOC数据结构与算法Python版 目录 一.什么是递归Recursion 1. 初识递归 1.1 数列求和 1.2 递归"三定律" 2. 递归的应用 2.1 任意进制转 ...

  7. 数据结构与算法 python版 之 递归三定律

    #数据结构与算法 python版 之 谢尔宾斯基三角形 , 树叉 1.为了向阿西莫夫的"机器人三定律"直径,递归算法也总结出"三定律" 1递归算法必须有一个基本 ...

  8. Java数据结构和算法(八)——递归

    记得小时候经常讲的一个故事:从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容是"从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老 ...

  9. 计算机算法设计与分析 递归实现快速排序和随机化实现快速排序

    递归实现快速排序 主要在于哨兵的选择和分部分进行排序,每次递归将左右两部分分开进行排序,选取子数列的第一个元素作为哨兵,后面按照方法排序即可. #include<bits/stdc++.h> ...

最新文章

  1. 运营谈恋爱,真的太太太太太太会撩了
  2. maximo 工作流实现代码
  3. html制作表格保存为txt文件,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
  4. PHP编程最快明白 by www.kuphp.com 案例实战zencart1.38a支付模块简化Fast and Easy Checkout配置...
  5. 历届试题 大臣的旅费(深搜 树的直径)
  6. extjs html页面刷新,ExtJS onReady引发的浏览器对页面的加载过程
  7. 【ElasticSearch】Es 源码之 Discovery DiscoveryModule 源码解读
  8. Android开发—文字自动轮播实现
  9. SQL查询最近几年、几月的数据
  10. 证明不同特征值的实对称矩阵的特征向量相互正交的
  11. git rebase操作
  12. 计算机主板提示ahci,电脑BIOS没有AHCI功能没有办法BIOS刷新怎么办
  13. fme使用workspacerunner批量处理数据
  14. 2019年最值得期待的区块链项目:PlusFo到底行不行?
  15. prop和attr的区别-jQuery
  16. python rolling regression. 使用 Python 实现滚动回归
  17. 【转】CAN接口电路的 EMC设计方案(工业)
  18. android 常驻通知,android实现常驻通知栏遇到的问题及解决办法
  19. 学计算机的大1新生规划,大一新生学习计划
  20. git not found

热门文章

  1. 彻底解决zend studio 下 assignment in condition警告
  2. 使用 servlet 连接数据库
  3. IDEA创建文件添加作者及时间信息
  4. 深度学习之卷积神经网络 ZF Net
  5. python实例化对象做实参_如何在Python中记住类实例化?
  6. 关于安装deepin+window10双系统有时没有声音的问题
  7. 解决AttributeError: 'str' object has no attribute 'decode'报错问题
  8. Django中object.all
  9. SVM之交叉验证【转】
  10. java汉字转化accic_Java自主学习贴