思路:首先将 arr1 中未在 arr2 中出现的元素提取出来,排序后放在数组末尾。然后对 arr1 中在 arr2 中出现的元素进行排序,排序时按照 arr2 中的相对顺序进行排序。

代码如下:

void relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size){
    int tempArr[arr1Size]; // 用于存放未在 arr2 中出现的元素
    int tempArrSize = 0; // 未在 arr2 中出现的元素的个数
    int i, j, k, temp;
    
    // 将未在 arr2 中出现的元素提取出来,存放在 tempArr 中
    for (i = 0; i < arr1Size; i++) {
        for (j = 0; j < arr2Size; j++) {
            if (arr1[i] == arr2[j]) {
                break;
            }
        }
        if (j == arr2Size) {
            tempArr[tempArrSize++] = arr1[i];
        }
    }
    
    // 对未在 arr2 中出现的元素进行排序
    for (i = 0; i < tempArrSize - 1; i++) {
        for (j = i + 1; j < tempArrSize; j++) {
            if (tempArr[i] > tempArr[j]) {
                temp = tempArr[i];
                tempArr[i] = tempArr[j];
                tempArr[j] = temp;
            }
        }
    }
    
    // 对在 arr2 中出现的元素进行排序
    for (i = 0; i < arr2Size; i++) {
        for (j = i + 1; j < arr1Size; j++) {
            if (arr1[j] == arr2[i]) {
                // 将 arr2 中的元素移到当前位置
                temp = arr1[i];
                arr1[i] = arr1[j];
                arr1[j] = temp;
                // 对 arr2 中的元素进行排序
                for (k = i + 1; k < arr2Size; k++) {
                    if (arr1[i] > arr1[k]) {
                        temp = arr1[i];
                        arr1[i] = arr1[k];
                        arr1[k] = temp;
                    }
                }
            }
        }
    }
    
    // 将 tempArr 中的元素添加到 arr1 末尾
    for (i = 0; i < tempArrSize; i++) {
        arr1[arr2Size + i] = tempArr[i];
    }
}
C语言数组相对排序 (无指针)

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

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