代码生成(用C语言生成0~999 999(均包含,或者更大范围)之间的随机整数20 000个,要求随机数都不相同(如相同,则需要去重复并重新生成当前随机数),即,得到20 000个两两不同的随机数。并用选择排序对随机数递增排序,并分别计算出算法对应的数据真实比较次数;)
时间: 2023-11-29 15:04:05 浏览: 88
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 1000000 // 生成随机数的最大值
#define ARRAY_SIZE 20000 // 数组大小
// 选择排序
void selection_sort(int arr[], int n, int *compare_count) {
int i, j, min_idx, temp;
for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++) {
(*compare_count)++; // 计算比较次数
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
temp = arr[i];
arr[i] = arr[min_idx];
arr[min_idx] = temp;
}
}
int main() {
int arr[ARRAY_SIZE] = {0}; // 存储随机数的数组
int i, compare_count = 0;
srand((unsigned) time(NULL)); // 设置随机数种子
// 生成随机数
for (i = 0; i < ARRAY_SIZE; i++) {
int num = rand() % MAX_NUM; // 生成随机数
for (int j = 0; j < i; j++) { // 检查数组中是否已经存在相同的随机数
if (arr[j] == num) {
i--; // 如果存在相同的随机数,重新生成当前随机数
break;
}
}
arr[i] = num; // 将不重复的随机数存入数组
}
// 排序并计算比较次数
selection_sort(arr, ARRAY_SIZE, &compare_count);
// 输出排序后的数组
for (i = 0; i < ARRAY_SIZE; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 输出比较次数
printf("Selection sort comparison count: %d\n", compare_count);
return 0;
}
```
该程序使用与前面相同的代码生成随机数,并使用选择排序对随机数进行递增排序。在选择排序过程中,使用compare_count变量记录比较次数。程序输出排序后的数组,并输出选择排序的比较次数。
阅读全文