
数据结构——排序
发布日期:2021-05-10 01:17:31
浏览次数:22
分类:精选文章
本文共 4558 字,大约阅读时间需要 15 分钟。
//冒泡排序#includeusing namespace std;typedef struct{ int key; char *otherinfo;}ElemType;//顺序表的存储结构typedef struct{ ElemType *r; //存储空间的基地址 int length; //顺序表长度}SqList; //顺序表类型void BubbleSort(SqList &L){ //对顺序表L做冒泡排序 int m,j,flag; ElemType t; m=L.length-1; flag=1; //flag用来标记某一趟排序是否发生交换 while((m>0)&&(flag==1)) { flag=0; //flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序 for(j=1;j<=m;j++) if(L.r[j].key>L.r[j+1].key) { flag=1; //flag置为1,表示本趟排序发生了交换 t=L.r[j];L.r[j]=L.r[j+1];L.r[j+1]=t; //交换前后两个记录 } //if --m; } //while} //BubbleSortvoid Create_Sq(SqList &L){ int i=1,n; cin>>n; while(n) { L.r[i++].key=n; cin>>n; L.length++; }}void show(SqList L){ int i; for(i=1;i<=L.length;i++) cout< <<" ";}int main(){ SqList L; L.r=new ElemType[100]; L.length=0; Create_Sq(L); BubbleSort(L); show(L);}//直接插入排序#include using namespace std;#define MAXSIZE 20 //顺序表的最大长度typedef struct{ int key; char *otherinfo;}ElemType; typedef struct{ ElemType *r; //存储空间的基地址 int length; //顺序表长度}SqList; //顺序表类型void InsertSort(SqList &L){ //对顺序表L做直接插入排序 int i,j; for(i=2;i<=L.length;++i) if(L.r[i].key >n; //输入个数 while(n) { L.r[i++].key=n; L.length++; cin>>n; }}void show(SqList L){ int i; for(i=1;i<=L.length;i++) cout< <<" ";}int main(){ SqList L; L.r=new ElemType[100]; L.length=0; Create_Sq(L); InsertSort(L); show(L);}//选择排序#include using namespace std;#define MAXSIZE 20 //顺序表的最大长度typedef struct{ int key; char *otherinfo;}ElemType;//顺序表的存储结构typedef struct{ ElemType *r; //存储空间的基地址 int length; //顺序表长度}SqList; //顺序表类型void SelectSort(SqList &L){ //对顺序表L做简单选择排序 int i,j,k; ElemType t; for(i=1;i >n; while(n) { L.r[i++].key=n; cin>>n; L.length++; }}void show(SqList L){ int i; for(i=1;i<=L.length;i++) cout< <<" ";}int main(){ SqList L; L.r=new ElemType[MAXSIZE+1]; L.length=0; Create_Sq(L); SelectSort(L); show(L);}//希尔排序#include using namespace std;#define MAXSIZE 20 //顺序表的最大长度typedef struct{ int key; char *otherinfo;}ElemType;//顺序表的存储结构typedef struct{ ElemType *r; //存储空间的基地址 int length; //顺序表长度}SqList; //顺序表类型void ShellInsert(SqList &L,int dk){ //对顺序表L做一趟增量是dk的希尔插入排序 int i,j; for(i=dk+1;i<=L.length;++i) if(L.r[i].key 0&& L.r[0].key >n; while(n) { L.r[i++].key=n; cin>>n; L.length++; }}int show(SqList L){ int i; for(i=1;i<=L.length;i++) cout< <<" ";}int main(){ SqList L; L.r=new ElemType[MAXSIZE+1]; L.length=0; Create_Sq(L); int i,t;//增量数组的长度 int *dt=new int[MAXSIZE];//增量数组 dt[0]=4;dt[1]=2;dt[2]=1; ShellSort(L,dt,3); show(L);}//快速排序#include using namespace std;typedef struct{ int key; char *otherinfo;}ElemType;//顺序表的存储结构typedef struct{ ElemType *r; //存储空间的基地址 int length; //顺序表长度}SqList; //顺序表类型int Partition(SqList &L,int low,int high){ int pivotkey; L.r[0]=L.r[low]; //用子表的第一个记录做枢轴记录 pivotkey=L.r[low].key; //枢轴记录关键字保存在pivotkey中 while(low =pivotkey) --high; L.r[low]=L.r[high]; //将比枢轴记录小的记录移到低端 while(low <=pivotkey) ++low; L.r[high]=L.r[low]; //将比枢轴记录大的记录移到高端 }//while L.r[low]=L.r[0]; //枢轴记录到位 return low; //返回枢轴位置}//Partitionvoid QSort(SqList &L,int low,int high){ //调用前置初值:low=1; high=L.length; //对顺序表L中的子序列L.r[low..high]做快速排序 int pivotloc; if(low >n; while(n) { L.r[i++].key=n; cin>>n; L.length++; }}void show(SqList L){ int i; for(i=1;i<=L.length;i++) cout< <<" ";}int main(){ SqList L; L.r=new ElemType[100]; L.length=0; Create_Sq(L); QuickSort(L); show(L);}//堆排序#include using namespace std;#define MAXSIZE 20 //顺序表的最大长度typedef struct{ int key;}ElemType;//顺序表的存储结构typedef struct{ ElemType *r; //存储空间的基地址 int length; //顺序表长度}SqList; //顺序表类型//筛选法调整堆void HeapAdjust(SqList &L,int s,int m){ //假设r[s+1..m]已经是堆,将r[s..m]调整为以r[s]为根的大根堆 ElemType rc; int j; rc=L.r[s]; for(j=2*s;j<=m;j*=2) { //沿key较大的孩子结点向下筛选 if(j =L.r[j].key) break; //rc应插入在位置s上 L.r[s]=L.r[j]; s=j; } L.r[s]=rc; //插入}void Create_Sq(SqList &L){ int i=1,n; cin>>n; while(n) { L.r[i++].key=n; cin>>n; L.length++; }}//建初堆void CreatHeap(SqList &L){ int i,n; n=L.length; for(i=n/2;i>0;--i) HeapAdjust(L,i,n);}void HeapSort(SqList &L){ //对顺序表L进行堆排序 int i; ElemType x; CreatHeap(L); //把无序序列L.r[1..L.length]建成大根堆 for(i=L.length;i>1;--i) { x=L.r[1]; //将堆顶记录和当前未经排序子序列L.r[1..i]中最后一个记录互换 L.r[1]=L.r[i]; L.r[i]=x; HeapAdjust(L,1,i-1); //将L.r[1..i-1]重新调整为大根堆 }}void show(SqList L){ int i; for(i=1;i<=L.length;i++) cout< <<" ";}int main(){ SqList L; L.r=new ElemType[MAXSIZE+1]; L.length=0; Create_Sq(L); HeapSort(L); show(L);}
发表评论
最新留言
不错!
[***.144.177.141]2025年04月27日 02时20分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
前端笔试题总结(三) - CSS篇
2021-05-10
C语言字符型、整型和变量的长度
2021-05-10
OpenCV camshift目标追踪
2021-05-10
Redis缓存穿透和缓存雪崩
2021-05-10
spring 的@ComponentScan 理解
2021-05-10
C++ e 神秘数组——vector
2021-05-10
day04_CSS选择器
2021-05-10
js 获取时间戳的方法
2021-05-10
C++ 底层语言的信仰-指针分类
2021-05-10
DFS
2021-05-10
概念模型向逻辑模型的转换
2021-05-10
python基础语法
2021-05-10
const修饰指针(常量指针与指针常量的区别)
2021-05-10
设计模式-创建型02-工厂模式-工厂方法模式01
2021-05-10
设计模式-行为型09-访问者模式(Visitor)
2021-05-10
微信小程序sort时间排序
2021-05-10
13个JavaScript单行式代码
2021-05-10
5个很常用的CSS3网页小实例
2021-05-10