c语言对于输入的n个整数,先进行升序排序,然后进行二分查找。
输入格式:
测试数据有多组,处理到文件尾。每组测试数据的第一行是一个整数n(1≤n≤100),第二行有n个各不相同的整数待排序,第三行是查询次数m(1≤m≤100),第四行有m个整数待查找。
输出格式:
对于每组测试,分2行输出,第一行是升序排序后的结果,每两个数据之间留一个空格;第二行是查找的结果,若找到则输出排序后元素的位置(从1开始),否则输出0,同样要求每两个数据之间留一个空格。
输入样例:
9
4 7 2 1 8 5 9 3 6
5
10 9 8 7 -1
输出样例:
1 2 3 4 5 6 7 8 9
0 9 8 7 0
示例如下:
#include <stdio.h>
#define MAXN 100
int arr[MAXN + 1];
void Quick_Sort(int left, int right) { // 快排
if (left >= right)
return;
int i = left, j = right, temp = arr[i];
while (i < j) {
while (i < j && arr[j] > temp)
j--;
if (i < j)
arr[i] = arr[j];
while (i < j && arr[i] <= temp)
i++;
if (i < j)
arr[j] = arr[i];
}
arr[i] = temp;
Quick_Sort(left, i - 1);
Quick_Sort(i + 1, right);
}
int binary_search(int n, int x) { // 二分搜索
int left = 1, right = n, mid;
while (left <= right) {
mid = (left + right) >> 1;
if (arr[mid] == x)
return mid; // 找到
else if (arr[mid] > x)
right = mid - 1;
else if (arr[mid] < x)
left = mid + 1;
}
return 0; // 没找到
}
int main() {
int n, m;
while (~scanf("%d", &n)) {
for (int i = 1; i <= n; i++)
scanf("%d", &arr[i]);
Quick_Sort(1, n);
for (int i = 1; i < n; i++) // 升序输出
printf("%d ", arr[i]);
printf("%d\n", arr[n]);
scanf("%d", &m);
int x;
while (m--) {
scanf("%d", &x);
int answer = binary_search(n, x);
printf("%d ", answer);
}
putchar('\n');
}
return 0;
}
```