已知数组A[1…m+n]中,前m个元素(A[1]~A[m])递增有序,后n个元素(A[m+1] ~A[m+n])递增有序,设计算法,使得数组A中的元素全部递增有序。C语言程序
时间: 2024-10-11 22:09:52 浏览: 45
可以使用归并排序的思想来合并两个已排序的部分,然后将结果插入到原始数组A中。这里提供一个简单的C语言函数来实现这个过程:
```c
#include <stdio.h>
void merge(int A[], int m, int n) {
int i = m, j = m + n - 1; // 初始化两个指针分别指向两个部分的末尾
int temp[A[0] != 0 ? m + n : 1]; // 创建临时数组
while (i >= 0 && j >= m) { // 只要还有未比较完的元素
if (A[i] <= A[j]) { // 如果左半部分较小
temp[i++] = A[i]; // 移动左侧指针
} else { // 否则,移动右侧指针并将值放入临时数组
temp[j--] = A[j];
}
}
// 将剩余部分,如果有的话,添加到结果数组
while (i >= 0)
temp[i++] = A[i];
while (j >= m)
temp[j--] = A[j];
// 将排序后的临时数组复制回原数组
for (int k = 0; k < m + n; k++) {
A[k] = temp[k];
}
}
// 主函数示例
int main() {
int A[] = {4, 5, 1, 6, 2, 7, 3}; // 假设 m=3, n=4
int m = sizeof(A) / sizeof(A[0]) - 1;
printf("Before sorting:\n");
for (int i = 0; i < m + n; i++)
printf("%d ", A[i]);
merge(A, m, n);
printf("\nAfter sorting:\n");
for (int i = 0; i < m + n; i++)
printf("%d ", A[i]);
return 0;
}
```
当你运行这个程序时,输入的数组`A`会按照要求变为递增有序。
阅读全文