代码生成(用C语言生成0~999 999(均包含,或者更大范围)之间的随机整数20 000个,要求随机数都不相同(如相同,则需要去重复并重新生成当前随机数),即,得到20 000个两两不同的随机数,用冒泡排序实现所得20 000个随机数的递增排序,并分别计算出算法对应的数据真实比较次数;,)
时间: 2023-08-15 20:06:13 浏览: 101
以下是用C语言生成不重复的随机整数并进行排序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1000000
void bubbleSort(int arr[], int n, int *cmp) {
int temp;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
(*cmp)++;
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[20000];
int cmp = 0;
srand((unsigned int)time(NULL));
for (int i = 0; i < 20000; i++) {
int num = rand() % MAX;
for (int j = 0; j < i; j++) {
if (num == arr[j]) {
i--;
break;
}
if (j == i - 1) {
arr[i] = num;
}
}
}
bubbleSort(arr, 20000, &cmp);
printf("The number of comparisons is %d\n", cmp);
return 0;
}
```
首先,我们定义一个数组arr来存储随机数,同时定义一个变量cmp来记录排序时比较的次数。
然后,我们使用srand()函数来设置随机数生成器的种子,以便每次运行程序时生成的随机数都不同。接着,我们使用for循环生成20000个随机数,并且使用嵌套的for循环来检查新生成的随机数是否已经在数组中存在,如果存在,则重新生成一个新的随机数,直到得到一个不在数组中的随机数。
接下来,我们调用bubbleSort()函数来对随机数进行排序。该函数使用冒泡排序算法来进行排序,并且在比较元素大小时更新cmp变量的值。
最后,我们输出比较次数即可。
阅读全文