实现数组从大到小或从小到大排列(冒泡排序)
题目
编写一个程序,输入两个包含5个数值的数值,先将两个数组升序(从小到大)排列,然后将两个素组合并成一个升序素组:
题目分析
1、 通过题目我们已知要求排列数组中的数据,那么这里用到冒泡排序的方法,基本思想是通过控制数组下标控制数组元素前后比较,例如:arr[0]=5,arr[1]=6;如果arr[0]>arr[1],就通过临时变量temp交换arr[0]和arr[1]的值即可。
程序应用的冒泡排序:
for (int i = 0; i < n; i++)
for (int j = 0; j < n - 1; j++)
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
2、合并数组这里使用的比较简单,for循环加if判断,当变量i<5的时候就把数组1的数值值赋到新数组0-4的位置,当i>5时,就把数组2的数值赋值到下标5-9上,因为i在条件内始终++,当i=5时即需要减去5,arr2[i-5]才表示arr2中的第一位元素:
程序应用的部分:
for (int i = 0; i < 10; i++)
if (i < 5)
allarr[i] = arr1[i];
else
allarr[i] = arr2[i - 5];
3、程序完整代码
#include <stdio.h>
#define N 10
int numlist(int arr[5], int n)
{
int temp;
printf("从小到大排列为:\n");
for (int i = 0; i < n; i++)
for (int j = 0; j < n - 1; j++)
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int allnum(int arr1[], int arr2[])
{
int allarr[N];
for (int i = 0; i < 10; i++)
if (i < 5)
allarr[i] = arr1[i];
else
allarr[i] = arr2[i - 5];
printf("\n合并数组之后的排序为:\n");
numlist(allarr, N);
}
int main()
{
int arr1[5];
int arr2[5];
printf("请输入第一个数组的五个值:\n");
for (int i = 0; i < 5; i++)
scanf("%d", &arr1[i]);
printf("请输入第二个数组的五个值:\n");
for (int i = 0; i < 5; i++)
scanf("%d", &arr2[i]);
//下面输入函数调用,写的很简单,所以就没有注释啦
numlist(arr1, 5);
numlist(arr2, 5);
allnum(arr1, arr2);
}
4、实验截图: