C语言:输入含有9个元素的有序数组,在输入一个数x,将x插入有序列中(数组的追加)(冒泡排序)(vs)

一,问题:

输入含有9个元素的有序数组,在输入一个数x,将x插入有序列中:

如:

输入 1 2 3 4 6 7 8 9 10    5

输出1 2 3 4 5 6 7 8 9 10

二,思路:

(1)先找到x要插入的位置;

(2)将从x插入所在位置的那个数组元素以及往后的元素都后移一个;

(3)再将数组输出即可;

三,实现过程:

(1)先定义一个含十个元素的数组:(10个是为了给x腾位置)

int arr[10] = { 0 };
printf("请输入该有序数组的元素:\n");
for (int i = 0; i < 9; i++)//实际输入还是9个数
{
	scanf_s("%d", &arr[i]);
}
int arr2[1] = { 0 };
printf("请输入X:");
scanf_s("%d", &arr2[0]);

(2)找位置:(result)就是我们要找到的那个位置!!!

    int j;
	int result=0;
	for (j = 0; j < 9; j++)
	{
		if (arr[j] >= arr2[0])
		{
			result = j;
			break;
		}
	}

(3)将从result开始的元素后移,为x腾出空间:

    for (int k = 9-1; k >= result; k--)//k=9-1是因为实际元素最后以为是arr[8]
	{
		arr[k + 1] = arr[k];//第一次:arr[9]=arr[8];第二次:arr[9]=arr[8]......这样就实现后移了
	}
	arr[result] = arr2[0];

(4)打印:

    printf("插入X后的结果:");
	for (int i = 0; i <= 9; i++)
	{
		printf("%d", arr[i]);
	}

四:源代码加运行图:

#include<stdio.h>
int main()
{
	int arr[10] = { 0 };
	printf("请输入该有序数组的元素:\n");
	for (int i = 0; i < 9; i++)
	{
		scanf_s("%d", &arr[i]);
	}
	int arr2[1] = { 0 };
	printf("请输入X:");
	scanf_s("%d", &arr2[0]);
	int j;
	int result=0;
	for (j = 0; j < 9; j++)
	{
		if (arr[j] >= arr2[0])
		{
			result = j;
			break;
		}
	}
	for (int k = 9-1; k >= result; k--)
	{
		arr[k + 1] = arr[k];
	}
	arr[result] = arr2[0];
	printf("\n");
	printf("插入X后的结果:");
	for (int i = 0; i <= 9; i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

扩展:如果问题是:一个长度为9的无序整型数组,在加入一个元素x,将其排序后以升序输出。

思路:那这个便可以用到两个知识:“数组追加”和“冒泡排序”;

(1)数组追加:

(声明arr3是为了先将arr1与arr2中的元素存放在同一个数组中,以便后面的“冒泡排序”)

    int arr1[9] = { 0 };
	printf("请输入arr1数组的元素:\n");
	for (int i = 0; i < 9; i++)
	{
		scanf_s("%d", &arr1[i]);
	}
	int arr2[1] = { 0 };
	printf("请输入arr2数组的元素:\n");
	scanf_s("%d", &arr2[0]);
	int arr3[10] = { 0 };//声明arr3是为了先将arr1与arr2中的元素存放在同一个数组中,以便后面的“冒泡排序”
	int index;
	for (index = 0; index < 9; index++)
	{
		arr3[index] = arr1[index];
	}
    arr3[index] = arr2[0];

(2)接下来就来进行“冒泡排序”:

	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9 - i; j++)
		{
			if (arr3[j] > arr3[j + 1])
			{
				int temp = arr3[j];
				arr3[j] = arr3[j + 1];
				arr3[j + 1] = temp;
			}
		}
	}

(3)总代码:

#include<stdio.h>
int main()
{
	int arr1[9] = { 0 };
	printf("请输入arr1数组的元素:\n");
	for (int i = 0; i < 9; i++)
	{
		scanf_s("%d", &arr1[i]);
	}
	int arr2[1] = { 0 };
	printf("请输入arr2数组的元素:\n");
	scanf_s("%d", &arr2[0]);
	int arr3[10] = { 0 };
	int index;
	for (index = 0; index < 9; index++)
	{
		arr3[index] = arr1[index];
	}
	arr3[index] = arr2[0];
	printf("打印arr3:\n");
	for (int j = 0; j < 10; j++)
	{
		printf("%d ", arr3[j]);
	}
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9 - i; j++)
		{
			if (arr3[j] > arr3[j + 1])
			{
				int temp = arr3[j];
				arr3[j] = arr3[j + 1];
				arr3[j + 1] = temp;
			}
		}
	}
	printf("\n");
	printf("将arr2插入有序数组arr1中且排序后:\n");
	for (int k = 0; k < 10; k++)
	{
		printf("%d ", arr3[k]);
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值