排序算法比较(归并,堆,快速,冒泡)
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<time.h>
#define MAXSIZE 100000
/******两路归并排序***************************/
void merge(int A[], int low, int mid, int high){
int i, j;
i = low;
j = mid+1;
int k = 0;
int *temp = (int *)malloc(sizeof(int)*MAXSIZE);//分配临时数组,存放有序序列
while (i < mid+1 && j <= high){
if (A[i] > A[j]){
temp[k++] = A[j++];
}
else {
temp[k++] = A[i++];
}
}
while (i <= mid){
temp[k++] = A[i++];
}
while (j <= high){
temp[k++] = A[j++];
}
for (i = 0; i < k; ++i){
A[low + i] = temp[i];
}
free(temp);//释放临时数组
}
void mergeSort(int A[],int low, int high){
if (low < high){
int mid = (low+high)/2;
mergeSort(A,low,mid);//归并排序前半段
mergeSort(A,mid+1,high);//归并排序后半段
merge(A,low,mid,high);//组合两个有序序列
}
}
/******冒泡排序***************************/
void upSort(int R[], int n){
int i, j, temp;
int flag;
for (i = n -1 ; i >= 1; --i){
flag = 0;//0为未进行排序
for (j = 1; j <= i; ++j){
if (R[j-1] > R[j]){
temp = R[j-1];
R[j-1] = R[j];
R[j] = temp;
flag = 1;
}
}
if (flag == 0) return ;
}
}
/******堆排***************************/
void Sift(int r[], int low, int high){
int i, j;
int temp;
i = low;
j = i*2;
temp = r[i];
while (j <= high){
if (j < high && r[j]<r[j+1]){
++j;
}
if (r[j] > temp){
r[i] = r[j];
i = j;
j = i*2;
}
else break;
}
r[i] = temp;
}
void heapSort(int r[], int n){
int i, temp;
for (i = n/2; i >= 1; --i){
Sift(r,i,n);
}
for (i = n; i >= 2; --i){
temp = r[1];
r[1] = r[i];
r[i] = temp;
Sift(r,1,i-1);
}
}
/******快排***************************/
void quickSort(int R[],int low, int hi){
int i, j;
i = low;
j = hi;
if (low < hi){
int temp = R[low];
while (i < j && R[j] > temp) --j;
if (i < j){
R[i] = R[j];
++i;
}
while (i < j && R[i] < temp) ++i;
if (i < j){
R[j] = R[i];
--j;
}
R[i] = temp;
quickSort(R,i+1,hi);
quickSort(R,low,i-1);
}
}
int main()
{
int start, end;
int R[MAXSIZE];
for (int i = 0; i < MAXSIZE; ++i){
R[i] = rand();
}
start = clock();
mergeSort(R,0,MAXSIZE-1);
end = clock();
printf("归并排序:%d毫秒\n",(end - start));
for (int i = 0; i < MAXSIZE; ++i){
R[i] = rand();
}
start = clock();
heapSort(R,MAXSIZE-1);
end = clock();
printf("堆排序:%d毫秒\n",(end - start));
for (int i = 0; i < MAXSIZE; ++i){
R[i] = rand();
}
start = clock();
quickSort(R,0,MAXSIZE-1);
end = clock ();
printf("快速排序:%d毫秒\n",(end - start));
for (int i = 0; i < MAXSIZE; ++i){
R[i] = rand();
}
start = clock();
upSort(R,MAXSIZE);
end = clock();
printf("冒泡排序:%d毫秒\n",(end - start));
return 0;
}
对MAXSIZE组随机数据进行比较: