c语言程序的基本结构由什么组成,c语言选择结构教学为了让大家掌握多种排序方法的基本思想, 本篇文章带着大家对数据结构的常用七大算法进行分析:包括直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序等, 并能够用高级语言实现 。
希望通过对这些算法效率的比较, 加深对算法的理解 。
①插入排序
②折半插入排序
③选择排序
④起泡排序
⑤快速排序
⑥希尔排序
⑦堆排序
⑧归并排序
用随机数(介于1-100)产生10个待排序数据元素的关键字值) 。
① 采用直接插入排序和希尔排序方法对上述待排数据进行排序并输出序后的有序序列;
② 采用冒泡排序、快速排序方法对上述待排数据进行排序并输出序后的有序序列;
③ 采用简单选择排序、堆排序方法对上述待排数据进行排序并输出序后的有序序列;
④ 采用归并排序方法对上述待排数据进行排序并输出排序后的有序序列;
头文件:
#include<cstdio>#include<iostream>#include<cstdlib>#define MAXSIZE 100using namespace std;typedef int KeyType;typedef int InfoType;typedef struct{ KeyType key; InfoType otherinfo;}RedType;typedef struct{ RedType r[MAXSIZE+1]; int length;}SqList;①插入排序
void InsertSort(SqList &L){ int i,j,a=0,b=0; for(i=1;i<=L.length;++i) { if(L.r[i].key<L.r[i-1].key) { L.r[0]=L.r[i]; L.r[i]=L.r[i-1]; a++; } for(j=i-2;L.r[0].key<L.r[j].key;--j) L.r[j+1]=L.r[j];b++; L.r[j+1]=L.r[0]; } cout<<"比较次数:"<<a<<"移动次数:"<<b<<endl;}②折半插入排序
void BInsertSort(SqList &L){ int low,high,m; for(int i=2;i<=L.length;++i) { L.r[0]=L.r[i]; low=1;high=i-1; while(low<=high) { m=(low+high)/2; if(L.r[0].key<L.r[m].key)high=m-1; else low=m+1; } for(int j=i-1;j>=high+1;--j) L.r[j+1]=L.r[j]; L.r[high+1]=L.r[0]; }}③选择排序
void SelectSort(SqList &L){ int j,k; for(int i=1;i<=L.length;++i) { k=i; for(j=i+1;j<=L.length;j++) if(L.r[j].key<L.r[k].key)k=j; if(k!=i) { L.r[0].key=L.r[i].key; L.r[i].key=L.r[k].key; L.r[k].key=L.r[0].key; } }}④起泡排序
void BubbleSort(SqList &L){ int i,j; for(i=1;i<=L.length;++i) { for(j=1;j<L.length-i+1;++j) { if(L.r[j+1].key<L.r[j].key) { L.r[0].key=L.r[j].key; L.r[j].key=L.r[j+1].key; L.r[j+1].key=L.r[0].key; } } }}⑤快速排序
int Partition(SqList &L,int low,int high){ L.r[0]=L.r[low]; KeyType pivotkey=L.r[low].key; while(low<high) { while(low<high&&L.r[high].key>=pivotkey)--high; L.r[low]=L.r[high]; while(low<high&&L.r[low].key<=pivotkey)++low; L.r[high]=L.r[low]; } L.r[low]=L.r[0]; return low;}void QSort(SqList &L,int low,int high){ if(low<high) { int pivotloc=Partition(L,low,high); QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high); }}⑥希尔排序
void ShellInsert(SqList &L,int dk){ int i,j; for(i=dk+1;i<=L.length;++i) { if(L.r[i].key<L.r[i-dk].key){L.r[0]=L.r[i]; for(j=i-dk;j>0&&L.r[0].key<L.r[j].key;j-=dk) L.r[j+dk]=L.r[j]; L.r[j+dk]=L.r[0]; } }}void ShellSort(SqList &L,int dlta[],int t){ for(int k=0;k<t;++k) ShellInsert(L,dlta[k]);}⑦堆排序
typedef SqList HeapType;void HeapAdjust(HeapType &H,int s,int m){ RedType rc=H.r[s];int j; for(j=2*s;j<=m;j*=2) { if(j<m&&H.r[j].key<H.r[j+1].key)++j; if(!(rc.key<H.r[j].key))break; H.r[s]=H.r[j];s=j; } H.r[s]=rc;}void HeapSort(HeapType &H){ int i; RedType temp; for(i=H.length/2;i>0;--i) HeapAdjust(H,i,H.length); for(i=H.length;i>1;--i) { temp=H.r[1]; H.r[1]=H.r[i]; H.r[i]=temp; HeapAdjust(H,1,i-1); }⑧归并排序
void Merge(RedType SR[],RedType &TR[],int i,int m,int n){ int j,k; for(j=m+1,k=i;i<=m&&j<=n;++k) { if(SR[i].key<=SR[j].key) TR[k]=SR[i++]; else TR[k]=SR[j++]; } int t; if(i<=m) { for(t=i;t<=m;t++) TR[k+t-i]=SR[t]; } if(j<=n) { for(t=j;t<=m;t++) TR[k+t-j]=SR[t]; }}void MSort(RedType SR[],RedType *TR1,int s,int t){ int m; RedType TR2[MAXSIZE+1]; if(s==t)TR1[s]=SR[s]; else{ m=(s+t)/2; MSort(SR,TR2,s,m); MSort(SR,TR2,m+1,t); Merge(TR2,TR1,s,m,t); }}void MergeSort(SqList &L){ MSort(L.r,L.r,1,L.length);}
- c语言的数据类型示意图,c语言里基本数据类型
- c语言用什么软件编辑,查找c语言答案的软件
- 治疗失眠的药物都有哪些
- 大三阳和小三阳区别的化验单怎么看
- 二对半化验单怎么看
- 怎么给2018-19赛季的NBA全明星赛投票?
- 衣服上的黑毛毛怎么去除?
- 40岁以后的中年男人大肚腩通过锻炼还能消灭吗?
- 我老婆左眼一直跳,各位大神有什么好的解决方案?
- 茭白的营养价值,孕妇能吃茭白吗?
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
