c语言生成不重复的0-200的随机数并存入数组,然后进行选择排序,再进行二分查找
时间: 2024-03-14 19:45:48 浏览: 97
好的,您的问题是如何使用C语言生成不重复的0-200的随机数并存入数组,然后进行选择排序,再进行二分查找。下面是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void selection_sort(int arr[], int size) {
int i, j, min, temp;
for (i = 0; i < size - 1; i++) {
min = i;
for (j = i + 1; j < size; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
int binary_search(int arr[], int size, int key) {
int low = 0, high = size - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
int main() {
int i, j, temp, size = 200;
int arr[size];
srand(time(NULL)); // 设置随机数种子
for (i = 0; i < size; i++) {
arr[i] = i;
}
for (i = 0; i < size; i++) {
j = rand() % size; // 生成0-199的随机数
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp; // 交换元素,打乱数组顺序
}
selection_sort(arr, size); // 进行选择排序
int key = 51; // 要查找的元素
int index = binary_search(arr, size, key); // 进行二分查找
if (index != -1) {
printf("元素%d在数组的第%d个位置\n", key, index + 1);
} else {
printf("元素%d不在数组中\n", key);
}
return 0;
}
```
代码解析:
1. 首先定义了两个函数,一个是选择排序,一个是二分查找。
2. 在主函数中定义了一个大小为200的数组arr,使用srand(time(NULL))生成随机数种子,然后使用两个for循环打乱数组顺序,即将数组中的元素随机交换。
3. 调用selection_sort函数进行选择排序,将数组中的元素按照从小到大的顺序排列。
4. 定义要查找的元素key,调用binary_search函数进行二分查找,如果元素存在于数组中,返回元素所在的位置,否则返回-1。
5. 最后根据返回值输出结果。
注意:此代码示例中生成的随机数是包括0和199的,如果您需要生成0到200之间的随机数,可以将rand() % size改为rand() % (size + 1)。
阅读全文