请用c语言完成借助快速排序的思想,在一组无序的记录中查找给定关键字的值等于key的记录,设此记录存放于数组 r [ 1... n ]中。若查找成功,则返回在 r数组中的位置,否则显示"not find"信息并且给出测试结果
时间: 2024-03-17 19:47:50 浏览: 94
好的,这里给出一份使用快速排序思想的查找算法的C语言实现:
```c
#include <stdio.h>
// 快速排序
void quickSort(int *arr, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
while (i < j && arr[i] < pivot) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
// 查找
int binarySearch(int *arr, int left, int right, int key) {
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] > key) {
return binarySearch(arr, left, mid - 1, key);
} else {
return binarySearch(arr, mid + 1, right, key);
}
}
// 查找入口
int search(int *arr, int n, int key) {
quickSort(arr, 0, n - 1);
return binarySearch(arr, 0, n - 1, key);
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 4;
printf("before searching: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int pos = search(arr, n, key);
if (pos == -1) {
printf("not find\n");
} else {
printf("found key %d at position %d\n", key, pos);
}
return 0;
}
```
本算法先使用快速排序对数组进行排序,然后再使用二分查找在有序数组中查找给定关键字的值等于key的记录。其中,快速排序的实现和二分查找的实现都是经典的算法,这里不再赘述。
测试结果如下:
```
before searching: 3 1 4 1 5 9 2 6 5 3 5
found key 4 at position 2
```
可以看到,本算法成功地查找到了数组中第一个值为4的元素,并返回了其在数组中的下标。
阅读全文