数据结构——排序
发布日期:2021-05-10 01:17:31 浏览次数:22 分类:精选文章

本文共 4558 字,大约阅读时间需要 15 分钟。

//冒泡排序#include 
using 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秒