数据结构--实验5---排序(c)
Posted zongyao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--实验5---排序(c)相关的知识,希望对你有一定的参考价值。
仅供参考
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "iomanip.h" 4 #include "time.h" 5 #include "iostream.h" 6 const int N=150000; 7 #define ElemType int 8 void insertsort(ElemType R[],int n) //直接插入排序 9 { for ( int i=1; i<n; i++) //i表示插入次数,共进行n-1次插入 10 { ElemType temp=R[i]; //把待排序元素赋给temp 11 int j=i-1; 12 while ((j>=0)&& (temp<R[j])) 13 { R[j+1]=R[j]; j--; } // 顺序比较和移动 14 R[j+1]=temp;} 15 } 16 17 void BinaryInsertSort(ElemType R[],int n) //二分插入排序 18 { for(int i=1; i<n; i++) //共进行n-1次插入 19 { int left=0,right=i-1;ElemType temp=R[i]; 20 while(left<=right) 21 { int middle=(left+right)/2; //取中点 22 if(temp<R[middle]) right=middle-1; //取左区间 23 else left=middle+1; } //取右区间 24 for(int j=i-1;j>=left;j--) 25 R[j+1]=R[j]; //元素后移空出插入位 26 R[left]=temp; } 27 } 28 29 void Bubblesort(ElemType R[],int n) //冒泡排序 30 { int flag=1; //当flag为0则停止排序 31 for (int i=1; i<n; i++) //i表示趟数,最多n-1趟 32 { 33 flag=0; //开始时元素未交换 34 for (int j=n-1; j>=i; j--) 35 if (R[j]<R[j-1]) //发生逆序 36 { ElemType t=R[j]; 37 R[j]=R[j-1]; 38 R[j-1]=t;flag=1; } //交换,并标记发生了交换 39 if (flag==0) return; } 40 } 41 42 void selectsort(ElemType R[],int n) //直接选择排序 43 { int i,j,m; 44 ElemType t; 45 for ( i=0;i<n-1; i++ ) 46 { m=i ; 47 for ( j=i+1;j<n;j++ ) 48 if ( R[j]<R[m] ) m=j ; 49 if ( m!=i ) { t=R[i] ; R[i]=R[m] ; R[m]=t ; } 50 } 51 } 52 int quick_once(ElemType R[],int low,int high){ 53 ElemType t=R[low]; 54 while(R[high]>=t&&high>low){ 55 high--; 56 R[low]=R[high]; 57 58 59 while(R[low]<=t&&low<high) 60 low++; 61 R[high]=R[low]; 62 } 63 R[high]=t; 64 return high; 65 66 67 } 68 void quicksort(ElemType R[],int low,int high) 69 { 70 int mid; 71 if(low>=high) 72 return; 73 mid=quick_once(R,low,high); 74 quicksort(R,low,mid-1); 75 quicksort(R,mid+1,high); 76 return; 77 78 } 79 void Shellsort(ElemType R[],int n) 80 { 81 int i,j; 82 ElemType t; 83 for(int d=n/2;d>1;d/=2) 84 for(int j=d;j<n;j++) 85 t=R[j]; 86 while(i>0&&i-d>0&&R[i]<R[i-d]){ 87 R[i]=R[i-d]; 88 R[i]=t; 89 } 90 91 92 } 93 void print(ElemType R[],int n) //打印数组 94 { 95 for(int i=0;i<n;i++) 96 { if (i%10==0) printf(" "); 97 printf("%7d",R[i]); 98 } 99 printf(" "); 100 } 101 void main() 102 { int sele; 103 ElemType R[N],T[N]; 104 int n,k; 105 long t1,t2; 106 double tt; 107 srand(1); 108 for(int i=0;i<N;i++) T[i]=rand(); //产生10000个随机数 109 print(T,N); 110 printf(" "); 111 printf(" 排序 子系统 "); 112 printf(" ***************************** "); 113 printf(" * 1----直接插入排序 * "); 114 printf(" * 2----二分插入排序 * "); 115 printf(" * 3----冒 泡 排 序 * "); 116 printf(" * 4----直接选择排序 * "); 117 printf(" * 5------ 希尔排序 * "); 118 printf(" * 6------- 快速排序 * "); 119 printf(" * 6------- 排序 * "); 120 printf(" * 0----返 回 * "); 121 printf(" ***************************** "); 122 do 123 { 124 printf(" 请选择菜单项(0-6):"); 125 scanf("%d",&k); 126 for(int i=0;i<N;i++) R[i]=T[i]; 127 t1=time(NULL); 128 switch(k) 129 { case 1: 130 insertsort(R,N); 131 t2=time(NULL);tt=difftime(t2,t1); 132 cout<<"直接插入排序的时间是:"; 133 cout<<tt<<endl; 134 break; 135 case 2: 136 BinaryInsertSort(R,N); 137 t2=time(NULL);tt=difftime(t2,t1); 138 cout<<"二分插入排序的时间为:"<<tt<<endl;break; 139 case 3: 140 Bubblesort(R,N); 141 t2=time(NULL);tt=difftime(t2,t1); 142 cout<<"冒泡排序的时间为:"<<tt<<endl;break; 143 case 4: 144 selectsort(R,N); 145 t2=time(NULL);tt=difftime(t2,t1); 146 cout<<"直接选择排序的时间为:"<<tt<<endl; 147 case 5: 148 Shellsort(R,N); 149 t2=time(NULL);tt=difftime(t2,t1); 150 cout<<"希尔排序的时间为:"<<tt<<endl;break; 151 case 6: 152 quicksort(R,0,N); 153 t2=time(NULL);tt=difftime(t2,t1); 154 cout<<"快速排序的时间为:"<<tt<<endl;break; 155 } 156 }while(k); 157 158 }
以上是关于数据结构--实验5---排序(c)的主要内容,如果未能解决你的问题,请参考以下文章