用c语言不使用指针给你两个数组arr1 和 arr2arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中。对 arr1 中的元素进行排序使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
思路:
-
遍历 arr2 数组,将 arr2 中的元素按照在 arr1 中出现的顺序依次存放到一个新的数组中,这个数组即为排好序的 arr1 数组。
-
遍历 arr1 数组,将未在 arr2 中出现过的元素按照升序插入到新数组的末尾。
-
将新数组中的元素复制回原来的 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];
}
}
``
原文地址: https://www.cveoy.top/t/topic/e9bt 著作权归作者所有。请勿转载和采集!