c语言生成不重复的随机数并存入数组,然后进行选择排序,再进行二分查找
时间: 2024-03-14 11:45:35 浏览: 78
好的,我来解答您的问题。
首先,要生成不重复的随机数并存入数组,可以采用以下方法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10 // 数组长度
int main() {
int a[N], i, j, temp;
srand(time(NULL)); // 以当前时间为种子,初始化随机数生成器
// 生成不重复的随机数并存入数组
for (i = 0; i < N; i++) {
a[i] = rand() % 100; // 生成 0~99 之间的随机数
for (j = 0; j < i; j++) {
if (a[i] == a[j]) { // 如果生成的随机数与之前的数重复
i--; // 重新生成该数
break;
}
}
}
// 输出数组
printf("随机生成的数组为:\n");
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
// 选择排序
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (a[j] < a[i]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
// 输出排序后的数组
printf("排序后的数组为:\n");
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
// 二分查找
int key, low = 0, high = N - 1, mid;
printf("请输入要查找的数:");
scanf("%d", &key);
while (low <= high) {
mid = (low + high) / 2;
if (a[mid] == key) {
printf("找到了,下标为%d\n", mid);
break;
} else if (a[mid] > key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
if (low > high) {
printf("没找到\n");
}
return 0;
}
```
以上代码中,采用 `rand()` 函数生成随机数,并通过嵌套的循环确保生成的数不重复。然后使用选择排序对数组进行排序,最后通过二分查找查找数组中是否存在指定的数。
希望我的回答能对您有所帮助!
阅读全文