快速排序非递归算法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;
}
}
快速排序非递归算法c语言实现,数据结构与算法----3.5 非递归的快速排序方法相关推荐
- 快速排序的递归算法C语言
下面展示快速排序的递归算法 C语言 Dev-C++ 算法思路是:添加一个基准数k和一头一尾的两个伪指针i和j. 一般将第一个元素首先作为基数k,即k=a[1].每一趟的目的是,让基数左边的数都小于(大 ...
- 13:Scala语言的数据结构和算法
第十九章 Scala语言的数据结构和算法 19.1 数据结构(算法)的介绍 数据结构的介绍 1.数据结构是一门研究算法的学科,只从有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮.更加 ...
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
大数据技术之_16_Scala学习_13 第十九章 Scala语言的数据结构和算法 19.1 数据结构(算法)的介绍 19.2 看几个实际编程中遇到的问题 19.2.1 一个五子棋程序 19.2.2 ...
- 算法java语言描述_java语言描述数据结构与算法崔笑颜的博客
java语言描述数据结构与算法崔笑颜的博客 冒泡排序 插入排序 选择排序 希尔排序 快速排序 归并排序 二分查找package com.demo.test; import java.util.Arra ...
- 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并
数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并 第一章 冒泡排序 [1]Bubble_Sort.c 第二章 快速排序 [1]quick_sort.c 第三章 大数据 ...
- 数据结构与算法(python)递归:找零问题
参考自 MOOC数据结构与算法Python版 目录 一.什么是递归Recursion 1. 初识递归 1.1 数列求和 1.2 递归"三定律" 2. 递归的应用 2.1 任意进制转 ...
- 数据结构与算法 python版 之 递归三定律
#数据结构与算法 python版 之 谢尔宾斯基三角形 , 树叉 1.为了向阿西莫夫的"机器人三定律"直径,递归算法也总结出"三定律" 1递归算法必须有一个基本 ...
- Java数据结构和算法(八)——递归
记得小时候经常讲的一个故事:从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容是"从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老 ...
- 计算机算法设计与分析 递归实现快速排序和随机化实现快速排序
递归实现快速排序 主要在于哨兵的选择和分部分进行排序,每次递归将左右两部分分开进行排序,选取子数列的第一个元素作为哨兵,后面按照方法排序即可. #include<bits/stdc++.h> ...
最新文章
- 运营谈恋爱,真的太太太太太太会撩了
- maximo 工作流实现代码
- html制作表格保存为txt文件,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
- PHP编程最快明白 by www.kuphp.com 案例实战zencart1.38a支付模块简化Fast and Easy Checkout配置...
- 历届试题 大臣的旅费(深搜 树的直径)
- extjs html页面刷新,ExtJS onReady引发的浏览器对页面的加载过程
- 【ElasticSearch】Es 源码之 Discovery DiscoveryModule 源码解读
- Android开发—文字自动轮播实现
- SQL查询最近几年、几月的数据
- 证明不同特征值的实对称矩阵的特征向量相互正交的
- git rebase操作
- 计算机主板提示ahci,电脑BIOS没有AHCI功能没有办法BIOS刷新怎么办
- fme使用workspacerunner批量处理数据
- 2019年最值得期待的区块链项目:PlusFo到底行不行?
- prop和attr的区别-jQuery
- python rolling regression. 使用 Python 实现滚动回归
- 【转】CAN接口电路的 EMC设计方案(工业)
- android 常驻通知,android实现常驻通知栏遇到的问题及解决办法
- 学计算机的大1新生规划,大一新生学习计划
- git not found
热门文章
- 彻底解决zend studio 下 assignment in condition警告
- 使用 servlet 连接数据库
- IDEA创建文件添加作者及时间信息
- 深度学习之卷积神经网络 ZF Net
- python实例化对象做实参_如何在Python中记住类实例化?
- 关于安装deepin+window10双系统有时没有声音的问题
- 解决AttributeError: 'str' object has no attribute 'decode'报错问题
- Django中object.all
- SVM之交叉验证【转】
- java汉字转化accic_Java自主学习贴