合并两个有序序列
前言
第一行包含两个正整数n, m,用空格分隔; n表示第二行第一个升序序列中数字的个数; m表示第三行第二个升序序列中数字的个数
第二行包含n个整数,用空格分隔
第三行包含m个整数,用空格分隔
输出描述:
- 输出为一行,输出长度为n+m的升序序列
- 即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并
输入:
5 6
1 3 5 7 9
0 2 4 6 8 10
输出:
0 1 2 3 4 5 6 7 8 9 10
1、方法1——先合并再冒泡排序
方法1 显示利用数组开辟空间,再将两个数组合并后,通过冒泡排序算法进行排序:
-
在C语言基础阶段中 【C语言基础5——数组(1)】4、数组作为函数参数 已经详细学过冒泡排序算法了
-
在C语言进阶阶段中【C语言进阶11——字符和字符串函数及其模拟实现(2))7、内存操作函数】 已经详细学过库函数了
方法1的思路见下图:
void bubble_sort(int* arr, int sz)
{
//排序坐外面的大循环次数
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int flag = 1;//状态机标志位,代表数组本身元素就是从小到大排序的
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
flag = 0;//只要有一个地方需要排序,就置零
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
if (1 == flag)
{
//第一轮排序结果都是1,说明没有地方需要排序
break;//直接跳出后面的循环,不需要再排序了
}
}
}
int main()
{
int m = 0;//数组a的个数
int n = 0