数据结构实验——排序
Posted 你的微笑依然那样灿烂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构实验——排序相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <string.h> #include <map> #include <set> #include <queue> #include <deque> #include <list> #include <bitset> #include <stack> #include <stdlib.h> using namespace std; using namespace std; /* 输入一组关键字序列分别实现下列排序: 1.实现简单选择排序、直接插入排序和冒泡排序。 2.实现希尔排序算法。 3.实现快速排序算法。 4.实现堆排序算法。 */ #define Maxsize 100 typedef int KeyType; typedef int InfoType; typedef struct KeyType key; InfoType info; Type; typedef struct Type r[Maxsize+1]; int len; Sqlist; int data[Maxsize]; void Create(Sqlist &L,int n) L.len = n; for(int i=1;i<=n;i++) cin>>L.r[i].key; L.r[i].info = 0; void Print(Sqlist L) cout<<"序列为:"; for(int i=1;i<=L.len;i++) cout<<L.r[i].key<<' '; cout<<endl; void Bubble_sort(Sqlist &L) Type p; for(int i=1;i<=L.len;i++) for(int j=i+1;j<=L.len;j++) if(L.r[i].key>L.r[j].key) p = L.r[i]; L.r[i] = L.r[j]; L.r[j] = p; int Select_Min_Key(Sqlist L,int i) int k = i; Type minn = L.r[i]; for(int j=i;j<=L.len;j++) if(L.r[j].key<minn.key) minn = L.r[j]; k = j; return k; void Select_Min_sort(Sqlist &L) Type p; for(int i=1;i<=L.len;i++) int j=Select_Min_Key(L,i); if(i!=j) p = L.r[i]; L.r[i] = L.r[j]; L.r[j] = p; void Shell_pre(Sqlist &L,int d) int j; for(int i=d+1;i<=L.len;i++) if(L.r[i].key<L.r[i-d].key) L.r[0] = L.r[i]; for(j=i-d;j>0 &&( L.r[0].key<L.r[j].key);j-=d) L.r[j+d] = L.r[j]; L.r[j+d] = L.r[0]; int Reverse(int data[],Sqlist L) int i = 0; int k = L.len/2; while(k) data[i++] = k; k = k>>1; return i; void Shell_sort(Sqlist &L,int data[],int t) for(int i=0;i<t;i++) Shell_pre(L,data[i]); int QS_slove(Sqlist &L,int low,int high) int p; L.r[0] = L.r[low]; p = L.r[low].key; while(low<high) while(low<high && L.r[high].key>=p) high--; L.r[low] = L.r[high]; while(low<high && L.r[high].key<=p) low++; L.r[high] = L.r[low]; L.r[low] = L.r[0]; return low; void Q_sort(Sqlist &L,int low,int high) int p = 0; if(low<high) p = QS_slove(L,low,high); Q_sort(L,low,p-1); Q_sort(L,p+1,high); void Quick_sort(Sqlist &L) Q_sort(L,1,L.len); typedef Sqlist HeapType; void Heap_adjust(HeapType &H,int s,int m) Type rc = H.r[s]; for(int 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 Heap_sort(Sqlist &H) Type p; for(int i=H.len/2;i>0;i--) Heap_adjust(H, i, H.len); for(int i=H.len;i>1;i--) p = H.r[1]; H.r[1] = H.r[i]; H.r[i] =p; Heap_adjust(H, 1, i-1); int main() Sqlist L; int t; int n; cout<<"请输入要排序的个数n:"; cin>>n; cout<<"请输入n个数,回车结束"; Create(L,n); Print(L); cout<<"创建完毕"; cout<<"1--退出"<<endl; cout<<"2--冒泡排序"<<endl; cout<<"3--简单选择排序"<<endl; cout<<"4--希尔排序"<<endl; cout<<"5--快速排序"<<endl; cout<<"6--堆排序"<<endl; cout<<"请输入要排序的类型:"; while(cin>>n && n!=1) if(n==2) Bubble_sort(L); Print(L); cout<<"冒泡排序完毕。"<<endl; if(n==3) Select_Min_sort(L); Print(L); cout<<"简单选择排序完毕。"<<endl; if(n==4) t = Reverse(data,L); Shell_sort(L,data,t); Print(L); cout<<"希尔排序完毕。"<<endl; if(n==5) Quick_sort(L); Print(L); cout<<"快速排序完毕。"<<endl; if(n==6) Heap_sort(L); Print(L); cout<<"堆排序完毕。"<<endl; else goto A; A:; return 0;
以上是关于数据结构实验——排序的主要内容,如果未能解决你的问题,请参考以下文章