对于输入的n个整数,先进行升序排序,然后进行二分查找

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;
}

```