C语言数组相对排序 (无指针)
思路:首先将 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];
}
}
原文地址: https://www.cveoy.top/t/topic/n2e4 著作权归作者所有。请勿转载和采集!