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 }
View Code

相关文章: