随机输入两组整数,输入个数不固定(少于20个),分别将两组数排序,然后将两组数合并成一组有序的数(不能合并后再排序)。
#include <stdio.h>
void getArr(int a[], int len);
void printArr(int arr[], int len);
void swap(int arr[], int p1, int p2);
void sortArr(int arr[], int len);
void getArr(int a[], int len)
{
for (int i = 0; i < len; ++i)
{
printf("请输入第 %d 个数据:", (i + 1));
scanf("%d", &a[i]);
}
}
void printArr(int arr[], int len) {
printf("输出数组");
for (int i = 0; i < len; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void swap(int arr[], int p1, int p2) {
int temp = arr[p1];
arr[p1] = arr[p2];
arr[p2] = temp;
}
void sortArr(int arr[], int len) {
int flag = 0;
int k = 0, l = len - 1;
while (k <= l) {
for (int m = k; m < l; ++m) {
if (arr[m] > arr[m + 1]) {
swap(arr, m, m + 1);
flag = 1;
}
}
--l;
for (int m = l; m > k; --m ) {
if (arr[m] < arr[m - 1]) {
swap(arr, m, m - 1);
flag = 1;
}
}
++k;
if (!flag) {
break;
}
}
}
int main1() {
int arr[20] = {3, 4, 0, 2};
sortArr(arr, 4);
printArr(arr, 4);
return 0;
}
int main()
{
int a[20];
int b[20];
int c[40];
int lenA = 0, lenB = 0;
printf("请输入第一组输入个数:");
scanf("%d", &lenA);
getArr(a, lenA);
printf("请输入第二组输入个数:");
scanf("%d", &lenB);
getArr(b, lenB);
sortArr(a, lenA);
sortArr(b, lenB);
int m = 0, n = 0;
for (int i = 0; i < lenA + lenB; ++i)
{
if (m < lenA && n < lenB && a[m] <= b[n]) {
c[i] = a[m];
++m;
} else if (m < lenA && n < lenB && a[m] > b[n] ) {
c[i] = b[n];
++n;
} else if(m >= lenA && n < lenB) {
c[i] = b[n];
++n;
} else if (m < lenA && n >= lenB) {
c[i] = a[m];
++m;
} else {
break;
}
}
printArr(a, lenA);
printArr(b, lenB);
printArr(c, lenA + lenB);
return 0;
}