假如有一组无需关键字序列{39,11,68,46,75,23,71,8,86,34}请设计折半查找算法查找某一关键字key,注意先排序
时间: 2023-07-27 10:30:02 浏览: 77
好的,这是一个经典的折半查找问题。首先需要对这组无序关键字序列进行排序,然后再进行折半查找。
排序可以使用快速排序、归并排序等算法,这里我们选择简单的冒泡排序。
以下是折半查找的具体步骤:
1. 对无序序列进行排序,使用冒泡排序:
```
int arr[] = {39,11,68,46,75,23,71,8,86,34};
int n = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
```
2. 定义折半查找函数,输入排序后的数组和要查找的关键字key,返回关键字在数组中的位置(从0开始):
```
int binary_search(int arr[], int n, int key) {
int left = 0, right = n-1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
3. 调用折半查找函数查找关键字key,并输出结果:
```
int key = 75;
int pos = binary_search(arr, n, key);
if (pos == -1) {
printf("关键字 %d 不存在\n", key);
} else {
printf("关键字 %d 在数组中的位置是 %d\n", key, pos);
}
```
输出结果为:
```
关键字 75 在数组中的位置是 8
```
注意:以上代码只是为了演示折半查找的思路,实际中可以使用更高效的排序算法和查找算法。
阅读全文