用c语言给你两个数组arr1 和 arr2arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中。对 arr1 中的元素进行排序使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
思路:
首先遍历 arr2,将其中的元素按照在 arr1 中出现的顺序保存在一个新数组中。然后对新数组进行排序,最后再遍历一遍 arr1,将未出现在 arr2 中的元素按照升序放在末尾。
代码实现:
#include <stdio.h>
void relativeSortArray(int* arr1, int arr1Size, int* arr2, int arr2Size, int* result, int* resultSize){
int count[1001] = {0}; // 统计 arr1 中每个元素出现的次数
for(int i = 0; i < arr1Size; i++){
count[arr1[i]]++;
}
int index = 0;
for(int i = 0; i < arr2Size; i++){ // 遍历 arr2,将其中的元素按照在 arr1 中出现的顺序保存在一个新数组中
for(int j = 0; j < count[arr2[i]]; j++){
result[index++] = arr2[i];
}
count[arr2[i]] = 0; // 将 arr1 中已经出现的元素出现次数清零
}
for(int i = 0; i <= 1000; i++){ // 对未出现在 arr2 中的元素按照升序放在末尾
for(int j = 0; j < count[i]; j++){
result[index++] = i;
}
}
*resultSize = index; // 修改 result 的大小
}
int main(){
int arr1[] = {2,3,1,3,2,4,6,7,9,2,19};
int arr1Size = sizeof(arr1) / sizeof(int);
int arr2[] = {2,1,4,3,9,6};
int arr2Size = sizeof(arr2) / sizeof(int);
int result[arr1Size];
int resultSize = 0;
relativeSortArray(arr1, arr1Size, arr2, arr2Size, result, &resultSize);
for(int i = 0; i < resultSize; i++){
printf("%d ", result[i]);
}
return 0;
}
输出结果为:
2 2 2 1 4 3 3 9 6 7 19
``
原文地址: https://www.cveoy.top/t/topic/e9bp 著作权归作者所有。请勿转载和采集!