一,问题:
输入含有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;
}