一维数组的有序插入,用C语言写。

作者&投稿:滑叙 (若有异议请与网页底部的电邮联系)
C程序编写,将一个数插入到一个已经有序的数组里,要求保持有序~

源程序如下:
#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
int i, j, t, k;//定义循环变量
const int n = 10;//定义数组元素个数
int a[n], b[n + 1];//定义两个数组
printf("您喜欢的有序数组:
");//输入数组序列文字提
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);//循环输入数组元素
}
printf("请输入想插入的数字
");//输入要插入的数字
scanf("%d", &k);
for (i = 0; i <= n; i++)//循环遍历
{
if (i == n) b[i] = k;//如果走到最后都没有地方插入就放在最后
else b[i] = 0;
}
for (i = 0; i < n; i++)//循环遍历
{
for (j = 0; j < n; j++)
{
b[j] = a[i++];//依次将数组a付给b
}
}
for (j = 0; j < n; j++)//冒泡排序,将数组数列排好
{
for (i = 0; i < n - j; i++)
{
if (b[i] > b[i + 1])
{
t = b[i];
b[i] = b[i + 1];
b[i + 1] = t;
}
}
}
for (j = 0; j < n + 1; j++)//顺序输出
{
printf("%d ", b[j]);
}
}
程序输出结果如下:



扩展资料:
/*#include//感觉用二分法不错 直接插入排序也不错
//插入函数 往有序的数组a里插入值为element的元素使数组a依然有序
//算法思想大概就是从头开始遍历找到第一个大于element的数 然后插入 然后后面的元素依次移动。
void insert_array(int *a,int length,int element)
{
int i,j,t,f;
for(i=0;i<length;i++)
{
if(a[i]>element)
{
t=i;//找到位置以后 可以依次移动数组元素腾出位置了
for(j=length;j>=t;j--)
{
if(j==t)
a[j]=element;
else
a[j]=a[j-1];//数组依次往后移动,不管正序还是倒序都可以
}
f=1;
break;
}
}
if(f!=1)//当element大于所有数组元素时候
{
a[length]=element;
}
for(i=0;i<length+1;i++)
{
printf("%d ",a[i]);
}
}
int main()
{
int a[5]={1,2,3,5,6};
int e=7;
insert_array(a,5,e);
}

for(i=0;i<=n-1;i++)
{ if(a[i]<=m)
{ for(j=n-1;j<=i;i=i-1)
a[j+1]=a[j];
a[i]=n;}}

改成


for(i=0;i<=n-1;i++)
{ if(a[i]>=m)
{ for(j=n-1;j>=i;j--)
a[j+1]=a[j];
break;

}}
a[i]=m;

以下是一个可能的实现,包括insertX函数和主函数示例:

#include <stdio.h>

int insertX(int* pa, int n, int x) {
int i, j;
// 找到插入位置
for (i = 0; i < n; i++) {
if (pa[i] > x) {
break;
}
}
// 将插入位置后的元素后移
for (j = n; j > i; j--) {
pa[j] = pa[j - 1];
}
// 插入元素
pa[i] = x;
// 返回插入后数组的长度
return n + 1;
}

int main() {
int n, x;
printf("请输入有序数列的长度n:");
scanf("%d", &n);
int a[n];
printf("请输入%d个有序整数:
", n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
printf("请输入要插入的整数x:");
scanf("%d", &x);
n = insertX(a, n, x);
printf("插入后的有序整数为:
");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("
");
return 0;
}

在上述代码中,我们定义了一个insertX函数来实现将一个整数x插入到一个有序数组中的功能。该函数的参数包括一个指向数组首地址的指针pa,数组的长度n,以及要插入的整数x。函数的具体实现过程如下:

  • 遍历数组,找到插入位置,即第一个大于x的元素的位置i;

  • 将插入位置后的元素后移一位;

  • 在插入位置处插入x;

  • 返回插入后数组的长度n+1。

  • 在主函数中,我们先输入有序数列的长度n和n个有序整数,然后输入要插入的整数x。接着调用insertX函数将x插入到数组中,并输出插入后的有序整数序列。

    需要注意的是,上述代码并没有对输入的数据进行范围检查,如果输入的数据不符合要求,程序可能会出现错误。因此,在实际使用中应该添加相应的数据检查和错误处理机制。



以下是一个实现该功能的C语言代码:
#include <stdio.h>
int insertX(int *pa, int n, int x) {
int i, j;
// 寻找插入位置
for (i = 0; i < n; i++) {
if (pa[i] > x) {
break;
}
}
// 后移元素
for (j = n - 1; j >= i; j--) {
pa[j + 1] = pa[j];
}
// 插入元素
pa[i] = x;
// 返回新数组长度
return n + 1;
}
int main() {
int n, i, x;
int a[100];
// 输入数组元素个数和数组元素
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 输入要插入的元素
scanf("%d", &x);
// 调用插入函数
n = insertX(a, n, x);
// 输出结果
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
该代码中,insertX函数接受一个指向数组头部的指针pa、数组元素个数n和要插入的元素x,返回新的数组元素个数。该函数通过遍历数组找到插入位置,然后后移数组中插入位置后面的元素,最后插入新元素。主函数调用该函数并输出结果。

int insertX(int *pa,int n,int x)
{
int i,k;
for(i=0;i<n;i++)
if (pa[i]>x) break;
for(k=n;k>i;k--)
pa[k]=pa[k-1];
pa[i]=x;
return(0);
}
void main()
{

int a[100]={0,1,2,3,4,6,8,9,10};
int i;
insertX(a,9,5);
for(i=0;i<10;i++)
printf ("%4d",a[i]);
}


数组怎么自动排序 用哪个方法
快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现。冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来。选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组。插入排序是选择一个数组中的数据,通过不断的插入比较...

一维数组如何进行动态初始化?
深入探索数组初始化的艺术:一维数组篇在编程的世界里,一维数组的初始化方式犹如乐谱上的音符,有序而富有节奏。首先,让我们一起揭开它的神秘面纱:直接赋值的优雅:在定义时,你可以直接赋予初始值,就像这样:int a[3] = {1, 2, 3}; 这一简洁的操作,为数组赋予了初始的生命力。动态填充的灵...

顺序和链式存储结构哪个能存储有序表
觉得顺序存储结构和链式存储结构都可以存储有序表。顺序存储结构可以预先预留一定空间(如一维数组),链表存储结构比较灵活,可以动态开辟空间,需要时增加。要用哪种存储结构要看你的有序表要进行什么操作了。

什么是数组维数
数组通常采用一个整数来作下标,在多维数组之中采用一系列有序的整数来标注,这种整数列表之中整数的个数始终相同,且被称为数组维数,关于每个数组维度的边界称为维,维度为k的数组通常被称为k维,数组是一种数据结构,用来存储同一类型值的集合,通过一个整型下标可以访问数组的每一个值,数组维数是...

数组的定义是什么?
因此,二维数组的逻辑结构是:每个元素至多有两个直接前驱和两个直接后继。在C语言中,二维数组一般定义为:数组名[下标][下标]。2)n维数组在n维数组中,每个数据元素对应n个下标,受n个关系的制约,其中任一个关系都是线性关系,也可被看作数据元素为n-1维数组的一维数组。在C语言中多维数组...

创建一个5*5的二维数组。用随机函数为数组赋值,数值的范围【10...
for(i=0;i<24;i++)for(j=0;j<24-i;j++)if(a[0][j]>a[0][j+1]){t=a[0][j];a[0][j]=a[0][j+1];a[0][j+1]=t;} printf("\\n行优先递增有序:\\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%4d",a[i][j]);printf("\\n");} return 0;} ...

什么是数组维数
数组维数是指在多维数组之中采用一系列有序的整数来标注。整数列表之中整数始终相同的个数。在数据库中,数组维数与表中属性数量有关,属性越多,数组维数越大。属性,共同的性质和特点。计算机中的字段属性、资源特性和那些读取与修改的权限。例如:文件属性、用户的属性。按数组维数分类可以分为:一维...

最小堆到底什么用处?
不过你要随时维护数组保证数组有序,这在插入数据时还需要O(N)复杂度。)相比之下,最小堆只需要O(logN)的复杂度,是不是很牛逼(最先设计出这个数据结构的人,真的很牛逼啊)。此外,最小堆(好像是最大堆,算了,反正两个是一回事)还可以当做一个优先队列(就是按重要程度排个队,每次都...

单片机中数组是具体什么意思
楼上的比喻很贴切,数组是有序数据的集合,分为一维数组和二维数组,比如int a[10];就表示一个有10个整形数据的以为数组,数组元素分别放在a[0]~a[9]里面;二维数组可以看成一个行列式,比如int a[2][3]可以把它看做一个2层3格的柜子。

希尔排序的有序性证明
假设n = k轮时,数组是h-sorted,则n = k + 1轮时,数组是h-sorted。有归纳法可知,对任意自然数n,n轮后数组是h-sorted。所以关键是证明第2步。大概思路如下,我们用反证法,假设第一次h-sorted被违背是发生在某一轮内的各列上某一次插入排序比较\/交换操作后,存在A[m] > A[m + p*h...

晋宁县17662852302: 一维数组的有序插入,用C语言写. -
钊类爱德: int insertX(int *pa,int n,int x) { int i,k; for(i=0;i<n;i++) if (pa[i]>x) break; for(k=n;k>i;k--) pa[k]=pa[k-1]; pa[i]=x; return(0); } void main() { int a[100]={0,1,2,3,4,6,8,9,10}; int i; insertX(a,9,5); for(i=0;i<10;i++) printf ("%4d",a[i]); }

晋宁县17662852302: 有一个已经排好顺序的一维整型数组,今输入一个数,要求按原来排序的规律将他插入数组中(c程序编程) -
钊类爱德: int Insert(int* a, int size, int length, int num) { int iIndex = -1; int iCounter = 0; if (size >= length) { return 0; } for (iCounter = 0; iCounter < size; iCounter++) { if (a[iCounter] > num) { iIndex = iCounter; break; } } if (iIndex < 0) { a[size] = num; } else { for (...

晋宁县17662852302: c语言编写函数将一维数组从小到大排序,在主函数中读入数组的元素,再插入一个数据,插入后数组仍然有序 -
钊类爱德: int [] array =new int[*]; //一维数组 int temp=0; //容器 int i; //循环参数 int j; //循环参数 for(i=0;i<array.length-1;i++) //表示数组中前一个数 { for(j=i+1;j<array.length;j++)//表示数组中后一个数 { if(array[i]>array[j]) //如果前一个数 > 后一个数 { temp=array[i]; array[i]=array[j]; array[j]=temp; } } } 和? int temp=0; for(i=0;i<length-1;i++) { trmp+=array[i]; }

晋宁县17662852302: 设有一个已按从大至小顺序排好的数列存放在一维数组中,现输入一个数,仍按原来的排序规律将其插入到数组 -
钊类爱德: void insert(int * Array,int ArraySize,int Insert) { int i,j; for(i=0;i<ArraySize&&Array[i]>Insert;i++); for(j=ArraySize;j>i;j--) Array[j]=Array[j-1]; Array[i]=Insert; }

晋宁县17662852302: 用C语言定义一个一维数组A,随机输入6个整数,将其中的正整数按输入的次序存储至另外一个一维整形数组B中 -
钊类爱德: #include <stdio.h> int main(void) {int a[6],i,b[6],j,t,k;printf("please input:");for (i=0;i<6;i++){scanf("%d",a+i);}for(i=0;i<6;i++){if(a[i]>0)b[j++]=a[i];} for(i=0;i<j;i++)for(k=0;k<j;k++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;} for(i=0;i<j;i++)printf("%d",b[i]); }

晋宁县17662852302: C语言:在有序数组中插入一个数,使插入后数组仍然有序. -
钊类爱德: #include<stdio.h> #define size 20 int findposition(int x[],int N,int data); int insert(int x[],int N,int data,int pos); int main() { int a[size],i,N,d=50; printf("input a length:"); scanf("%d",&N); printf("input a array:"); for(i=0;i<N;i++) scanf("%d",&a[i]); ...

晋宁县17662852302: 用C对一维数组进行添加.排序,删除,插入操作 -
钊类爱德: #include <stdio.h>#define N 5 //用户输入几个数据,存入数组,再进行降序排列 void main() { int i,j; int temp; int grade[N]={23,45,78,66,55}; for(i=0;i<N;i++) { for(j=0;j<N-i-1;j++) { if(grade[j]<grade[j+1]) /* 交换元素 */ { temp=grade[j+1]; grade[j+1]=...

晋宁县17662852302: c语言程序设计 编程实现由键盘输入一个数插入到有序数组中. -
钊类爱德: #include<stdio.h> main () { int i,j,k; int n[8]={1,2,5,8,9,13,22}; printf("请输入需要插入的整数:\n"); scanf("%d",&k); if(k>n[6]) n[7]=k; else { for(i=0;n[i]<=k;i++); for(j=7-1;j>=i;j--) n[j+1]=n[j]; n[i]=k;} for(i=0;i<=7;i++) printf("%6d",n[i]); }

晋宁县17662852302: c语言编程.在升序数组中插入一个数据x,保持数组有序. -
钊类爱德:#include #includeint main() { int a[15]={1, 4, 7, 19, 22, 98, 100}, n = 7, v, i;scanf ("%d", &v);for (i = n; i > 0; --i){if(a[i-1] > v){a[i] = a[i-1];}else {a[i] = v;break;}}n++;if (i == 0)a[i] = v;for (i = 0; i printf ("%d ", a[i]);}printf ("\n");return 0; }

晋宁县17662852302: 用C语言编写有一个递增有序的整型数组A,输入一个数,将其插入到数组A中使得A依然保持有序性 -
钊类爱德: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28#include <stdio.h>main() {inta[10] = {0,1,2,3,4,6,7,8,9};inti=0,j=0,num=0;scanf("%d",&num);for(i=0;i<9;i++){if(num<a[i]){for(j=8;j>=i;j--){a[j+1] = a[j];}a[i]=...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网