1 // 主程序 (.cpp文件) 2 #include <stdio.h> 3 #include <time.h> 4 #include <stdlib.h> 5 #include <malloc.h> 6 #include <conio.h> 7 #include "BobbleSort.h" 8 #include "QuickSort.h" 9 #include "HeapSort.h" 10 11 int main() 12 { 13 int N; 14 int *a; 15 time_t start ,end; 16 double usetime; 17 int i,j; 18 i=1; 19 while(i<=3) 20 { 21 if(i==1) 22 printf("--------------------冒 泡 排 序--------------------\n"); 23 else if(i==2) 24 printf("--------------------快 速 排 序--------------------\n"); 25 else if(i==3) 26 printf("-------------------- 堆 排 序 --------------------\n"); 27 printf("输入数组元素N的值: "); 28 scanf("%d",&N); 29 if(i==3) 30 a=(int *)malloc((N+1)*sizeof(int)); 31 else 32 a=(int *)malloc(N*sizeof(int)); 33 if(!a)exit(1); 34 srand(time(NULL)); 35 if(i==3) 36 for(j=1;j<=N;j++) 37 a[j]=rand()%1000; 38 else 39 for(j=0;j<N;j++) 40 a[j]=rand()%1000; 41 start=clock(); 42 if(i==1) 43 BobbleSort(a,N); 44 else if(i==2) 45 QuickSort(a,0,N-1); 46 else if(i==3) 47 HeapSort(a,N); 48 end=clock(); 49 usetime=(end-start)*1.0/CLOCKS_PER_SEC; 50 printf("该排序所花的时间为:"); 51 printf("%lf 秒\n",usetime); 52 free(a); 53 i++; 54 } 55 getch(); 56 return 0; 57 } 58 59 //********************************* BobbleSort.h文件 60 void BobbleSort(int a[],int N) //冒泡排序的算法 61 { 62 int k,flag,m,j; 63 flag=1; //设置一个标志位用来表示在每一轮的比较中是否有元素交换. 64 m=N-1; 65 while(flag>0) 66 { 67 flag=0; 68 k=m; 69 for(j=0;j<k;j++) 70 if(a[j]>a[j+1]) 71 { 72 int t; 73 t=a[j];a[j]=a[j+1];a[j+1]=t; 74 flag=1; 75 m=j; 76 } 77 } 78 } 79 80 //************************************* QuickSort.h文件 81 int Partion(int a[],int low,int high) //找出分割位置 82 { 83 int key; 84 key=a[low]; 85 while(low<high) 86 { 87 while(low<high&&a[high]>=key)high--; 88 a[low]=a[high]; 89 while(low<high&&a[low]<=key)low++; 90 a[high]=a[low]; 91 } 92 a[low]=key; 93 return low; 94 } 95 void QuickSort(int a[],int low,int high) 96 { 97 int po; 98 if(low<high) 99 { 100 po=Partion(a,low,high); 101 QuickSort(a,low,po-1); //递归调用 102 QuickSort(a,po+1,high); 103 } 104 else return ; 105 } 106 107 //***************************************** HeapSort.h 文件 108 void swap(int &a,int &b) 109 { 110 a=a+b; 111 b=a-b; 112 a=a-b; 113 } 114 void Heapify(int a[],int k,int m) //整理堆 115 { 116 int k1=2*k; 117 int k2=2*k+1; 118 if(k2<=m) 119 { 120 if((a[k1]>a[k2]&&a[k2]>a[k])||(a[k1]>a[k]&&a[k2]<a[k])) 121 { 122 swap(a[k1],a[k]); 123 Heapify(a,k1,m); 124 } 125 else if((a[k1]<a[k2]&&a[k1]>a[k])||(a[k2]>a[k]&&a[k]>a[k1])) 126 { 127 swap(a[k2],a[k]); 128 Heapify(a,k2,m); 129 } 130 } 131 else if(k1<=m) 132 { 133 if(a[k1]>a[k]) 134 { 135 swap(a[k1],a[k]); 136 Heapify(a,k1,m); 137 } 138 } 139 else return ; 140 } 141 void HeapSort(int a[],int m) 142 { 143 int i; 144 for(i=m/2;i>=1;i--) 145 Heapify(a,i,m); 146 for(i=m;i>1;i--) 147 { 148 swap(a[i],a[1]); 149 Heapify(a,1,i-1); 150 } 151 }
相关文章: