记录一下今天中午突然来的需求,不知道是哪个朋友的朋友的朋友的朋友的朋友...的朋友的活儿到我这里来了,唉
题目是这样的:
排序实验
利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。
要求:
1)至少采用2种方法实现上述问题求解(提示,可采用的方法有直接插入排序、折半插入排序、起泡排序、快速排序、简单选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。
2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),排序需要用计时器。找出其中1种较快的方法。
3)计算最好和最坏的情形下需要的时间。
不知道是哪个学校的哪个学院出的题,反正挺常规的,在能力范围内,为了帮朋友交差,赶了着写完,也没优化细节,欢迎各位大神在评论区指正
/*
排序实验
利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。
要求:
1)至少采用2种方法实现上述问题求解(提示,可采用的方法有直接插入排序、折半插入排序、起泡排序、快速排序、简单选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。
2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),排序需要用计时器。找出其中1种较快的方法。
3)计算最好和最坏的情形下需要的时间。
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int randInt(int min, int max); // 生成区间为[a,b]的随机数;
void bubbleSort(int array[], int len); // 冒泡排序;
void selectionSort(int array[], int len); // 选择排序;
int main(void)
{
srand((unsigned)time(NULL));// 产生随时间变化的随机数种子;
int len = 25000; // 令数组长度为25000,为了符合题目生成20000以上的随机整数;
int arrayBubble[len];
int arraySelection[len];
int randNum;
clock_t start_t, end_t;
double total_t_b;
double total_t_s;
double min_time = 10;
double max_time = 0;
double temp_time;
FILE *fp = NULL;
for(int i = 0; i < len; i++)
{
randNum = randInt(0, 100);
arrayBubble[i] = randNum;
arraySelection[i] = randNum;
}
// 冒泡排序计时
start_t = clock();
bubbleSort(arrayBubble,len);
end_t = clock();
total_t_b = (double)(end_t - start_t) / CLOCKS_PER_SEC;
// 冒泡排序写入文件
fp = fopen("bubble.txt", "wt");
for(int i = 0; i<len; i++)
{
fprintf(fp,"%d ",arrayBubble[i]);
}
fclose(fp);
printf("已将冒泡排序结果写入文件到bubble.txt中\n");
// 选择排序计时
start_t = clock();
selectionSort(arraySelection,len);
end_t = clock();
total_t_s = (double)(end_t - start_t) / CLOCKS_PER_SEC;
// 选择排序写入文件
fp = fopen("selection.txt", "wt");
for(int i = 0; i<len; i++)
{
fprintf(fp,"%d ",arraySelection[i]);
}
fclose(fp);
printf("已将选择排序结果写入文件到selection.txt中\n");
printf("冒泡排序计时:%f,选择排序计时:%f\n",total_t_b,total_t_s);
if(total_t_b < total_t_s)
{
printf("冒泡排序较快\n");
}
else
{
printf("选择排序较快\n");
}
printf("开始计算最好情况用时与最坏情况用时,请稍后...\n");
for(int i = 0; i < 10; i++) // 循环10次统计出最好用时和最坏用时;
{
for(int i = 0; i < len; i++)
{
randNum = randInt(0, 100);
arrayBubble[i] = randNum;
arraySelection[i] = randNum;
}
start_t = clock();
bubbleSort(arrayBubble,len);
end_t = clock();
total_t_b = (double)(end_t - start_t) / CLOCKS_PER_SEC;
start_t = clock();
selectionSort(arraySelection,len);
end_t = clock();
total_t_s = (double)(end_t - start_t) / CLOCKS_PER_SEC;
temp_time = total_t_b < total_t_s ? total_t_b : total_t_s;
if(min_time > temp_time)
{
min_time = temp_time;
}
temp_time = total_t_b > total_t_s ? total_t_b : total_t_s;
if(max_time < temp_time)
{
max_time = temp_time;
}
}
printf("最好情况用时:%f,最坏情况用时%f",min_time,max_time);
printf("\n\n任意键退出......")
getchar();
return 0;
}
int randInt(int min, int max)
{
return rand() % (max - min + 1) + min;
}
void bubbleSort(int array[], int len)
{
int temp;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len-i; j++)
{
if (array[j] >= array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
void selectionSort(int array[], int len)
{
int temp;
int index;
for (int i = 0; i < len; i++)
{
temp = array[i];
for (int j = i; j < len; j++)
{
if (temp >= array[j])
{
temp = array[j];
index = j;
}
}
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
}