c语言完成,直接写代码不用解释:给定一组数:{38,18,29,18,23,10,65}利用任何一种排序算法,把上述数组进行从小到大的排序,排序完成后,生成新的数组,然后写一个折半查找方法,完成在上述队列中的折半查找功能。要能输入任何一个数,然后返回这个数在排序后的数组中的位置。
时间: 2023-02-09 18:17:51 浏览: 352
首先使用快速排序算法进行从小到大的排序:
```
#include <stdio.h>
#include <stdlib.h>
void quick_sort(int *arr, int left, int right) {
if (left >= right) {
return;
}
int i = left;
int j = right;
int pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
int main() {
int arr[] = {38, 18, 29, 18, 23, 10, 65};
int n = sizeof(arr) / sizeof(int);
quick_sort(arr, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
然后写一个折半查找的方法:
```
int binary_search(int *arr, int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
最后在主函数中调用二分查找方法并输入任意数即可:
```
int main() {
int arr[] = {38, 18, 29, 18, 23, 10, 65};
int n = sizeof(arr) / sizeof(int);
quick_sort(arr, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int target;
printf("请输入要查找的数:");
scanf("%d", &target);
int index = binary_search(arr, n, target);
if (index == -1) {
printf("没有找到数 %d\n", target);
} else {
printf("数 %d 在数组中的位置为 %d\
阅读全文