思路:

  1. 遍历 arr2 数组,将 arr2 中的元素按照在 arr1 中出现的顺序依次存放到一个新的数组中,这个数组即为排好序的 arr1 数组。

  2. 遍历 arr1 数组,将未在 arr2 中出现过的元素按照升序插入到新数组的末尾。

  3. 将新数组中的元素复制回原来的 arr1 数组中。

代码实现:

void sort(int* arr1, int arr1Size, int* arr2, int arr2Size){
    int sorted[arr1Size]; // 存放排好序的 arr1 数组
    int index = 0; // 记录已经插入到 sorted 数组中的 arr2 中的元素数量
    for(int i = 0; i < arr2Size; i++) {
        for(int j = 0; j < arr1Size; j++) {
            if(arr1[j] == arr2[i]) {
                sorted[index++] = arr1[j];
            }
        }
    }
    // 将未在 arr2 中出现过的元素按照升序插入到 sorted 数组的末尾
    for(int i = 0; i < arr1Size; i++) {
        int j;
        for(j = 0; j < arr2Size; j++) {
            if(arr1[i] == arr2[j]) {
                break;
            }
        }
        if(j == arr2Size) { // 未在 arr2 中出现过
            int k;
            for(k = index; k > 0 && sorted[k-1] > arr1[i]; k--) {
                sorted[k] = sorted[k-1];
            }
            sorted[k] = arr1[i];
            index++;
        }
    }
    // 将排好序的 arr1 数组复制回原来的 arr1 数组中
    for(int i = 0; i < arr1Size; i++) {
        arr1[i] = sorted[i];
    }
}
``
用c语言不使用指针给你两个数组arr1 和 arr2arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中。对 arr1 中的元素进行排序使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

原文地址: https://www.cveoy.top/t/topic/e9bt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录