已有一个排好序的数组,现要求输入一个数后,按原来排序的规律将它插入数组中

已有一个排好序的数组,(a[10]={1,3,5,6,8,9,34,45,65}利用数组初始化方式确定该数组)现要求输入一个数后,按原来排序的规律将它插入数组中。

#include <stdio.h>
int main ()
{
	int a[10]={1,3,5,6,8,9,34,45,65},i,t;
	scanf("%d",&a[9]);
for(i=9;i>=0;i--)
{
	if(a[i]<a[i-1])
	{t=a[i];
a[i]=a[i-1];
a[i-1]=t;}
}
for(i=0;i<10;i++)
{printf("%d ",a[i]);}
printf("\n");
return 0;
}

运行

 

在C语言中,将一个已有排序规律插入到已排好数组中,有多种实方法,以下是几种常见的实方式及其代码示例: ### 方法一:直接查找插入位置后移动元素 此方法直接在已排好数组中找到要插入的位置,然后将该位置及后面的元素依次向后移动一位,最后将插入放到该位置。 ```c #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int arr[100], n, i, j, k; //输入数组元素个 printf("请输入元素个:"); scanf("%d", &n); //输入排好数组 printf("请输入排好数组:\n"); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } //输入插入 printf("请输入插入:"); scanf("%d", &k); //在已排好数组中找到要插入的位置 for (i = 0; i < n; i++) { if (k < arr[i]) { break; } } //将要插入插入数组中 for (j = n - 1; j >= i; j--) { arr[j + 1] = arr[j]; } arr[i] = k; n++; //输出新数组 printf("新数组为:\n"); for (i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; } ``` ### 方法二:迭代比较法 通过将插入和原数组进行一一比较(原数组为升),当插入比原数组大时,对原数组插入进行交换,当比较发插入为最大时将数组最后的设置为插入。 ```c #include<stdio.h> int main() { int a[11]={1,3,5,7,8,9,10,11,13,14}; int i,t,m; printf("enter interger number:"); scanf("%d",&m); for(i=0;i<11;i++) { if(m<a[i]) { t=m; m=a[i]; a[i]=t; } else if(m>=a[9]) { a[10]=m; } } printf("\n插入后的数组:\n"); for(i=0;i<11;i++) { printf("%5d",a[i]); } return 0; } ``` ### 方法三:插入后重新排序插入放到数组末尾,然后使用冒泡排序对整个数组重新排序。 ```c #include<stdio.h> int main() { int a[11]={1,2,3,4,5,6,7,8,9,10}; int num,i,j,temp; printf("原始数组:"); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); scanf("%d",&num); a[10]=num; for(i = 0;i < 11;i ++) { for(j = 0;j < 11 - 1 - i;j++) { if(a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } printf("排序后:"); for(i=0;i<11;i++) { printf("%d ",a[i]); } return 0; } ``` ### 方法四:使用两个数组 定义两个数组一个存放原始列,另一个存放加入新之后的新列,通过比较确定插入位置并将元素放入新数组。 ```c #include<stdio.h> int main() { //首先定义两个数组一个存放原始列,另一个存放加入新之后的新列。 int t[10],s[11]; int i,j,k; printf("请输入十个有:"); for(i=0;i<10;i++){ scanf("%d",&t[i]); //键盘输入十个有列。 } /* 把换行符去掉,为了进行第二次输入。如果没有getchar(),有些编译器无法二次输入。 如果你的编译器不需要它也能二次输入,则可以去掉。*/ getchar(); printf("请输入要加入的:"); scanf("%d",&k); //输入要加入的。 for(i=0;i<9;i++) { //首先要确定这个的大小在哪个范围。 if((k>=t[i]&&k<=t[i+1])||(k<=t[i]&&k>=t[i+1])) { //确定之后,记录这个的范围的较小值,如 2<k<4 则 记录 j=2 j=i; } } for(i=0;i<11;i++){ if(i<j){ //如果 i 在 j 之前,则直接将 t 数组中的对应放到 s 数组中。 s[i]=t[i]; } else if(i==j){ //如果 i 等于 j ,还是直接将 t 数组中的对应放到 s 数组中。 s[i]=t[i]; //但 i+1 不能直接对应,而是将加入的值放入 i+1 中。 s[i+1]=k; } else{ /*由于多加入了一个,所以之后的要将 t 数组放到 s 数组的下一位。 也就是 t[i] 对应 s[i+1] */ s[i+1]=t[i]; } } printf("插入后的结果为:"); for(i=0;i<11;i++){ printf("%d ",s[i]); //最后打印新数组s } printf("\n"); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值