C语言中,怎样把一个整数按大小顺序插入已经排好序的整形数组中?

作者&投稿:典德 (若有异议请与网页底部的电邮联系)
C语言如何把一个整数按大小顺序插入已排好序的数组中?~

#include
void main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};//这个不用说了吧
for (i=0;i<10;i++)//十次循环
{
p=i;//到此p等于i等于0
q=a[i];//到此q等于a[0]=127
for (j=i+1;j<10;j++)//九次循环
if(q<a[j])//将q也就是a[i]和他后面的那些个元素比较,如果大于
{
p=j;//p赋值为较大的那个的下标
q=a[j];//q赋值为较大值
}
if (p!=i)//如果p!=i,注意初始时是等于的,不等于表示最大值不是a[0]是a[p]
{
s=a[i];
a[i]=a[p];
a[p]=s;//这三步交换a[i]和a[p],也就是把当前的最大值放到a[i]
}
printf("%d ",a[i]);
}//十次比较后,按最大到最小依次拍好了顺序,这个叫冒泡排序
printf("
input number:
");
scanf("%d",&n);//输入要插入的数n
for(i=0;i<10;i++)//十次循环
if (n>a[i])//如果n大于a[i],表示可以插入到a[i]位置
{
for(s=9;s>=i;s--)
a[s+1]=a[s];//将a[i]后面小于n的都后移,这个比较难理解你好好想想
break;
}
a[i]=n;//插入
for(i=0;i<=10;i++)//依次输出
printf("%d ",a[i]);
printf("
");
}

以上是我加的注释,你看看,咱们共同进步吧!

可以用调用函数做,先编一个函数完成:【把一个整数按大小顺序插入已排好序的数组中】的功能,在加一个for循环,循环调用此函数就可以求多个数的排序。

/*整体思路是先将输入的十个数从小到大排列好,然后再将单独输入的数与数组比较大小并将其插入数组中,这部分是关键。需要注意的是我们在刚开始时将数组长度定义为11,就是为后面插入一个数预留的空位*/
#include <stdio.h>
void main()
{
int a[11]; /*数组长度为11*/
int n=10,i,j,k,t;
int x,count;
printf("请输入十个整数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) /*用选择法将输入的十个数排列好*/
{
k=i;
for(j=i+1;j<10;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=0;i<10;i++) /*输出排列好的十个数*/
printf("%d ",a[i]);
printf("\n");
printf("请输入任意一个整数:\n");
scanf("%d",&x);
for(i=0;i<10;i++) /*将输入的数x与数组元素比较大小*/ {
if(x<a[i])
{
for(j=10;j>i;j--)
a[j]=a[j-1];
a[i]=x;
break;
}
}

for(i=0;i<11;i++) /*输出最后结果*/
printf("%d ",a[i]);
printf("\n");
}

主要通过动态数组实现,malloc分配初始数组,realloc重新分配大小,具体代码如下,
#include <stdio.h>
#include <stdlib.h>

void bubble_sort(int a[], int n);//冒泡法排序
int midsearch(int a[],int n,int x);//二分法查找插入位置

int main(int argc, char *argv[])
{
int *arr=NULL;
int n=0;//初始数组大小
int i=0;
int x=0;//待插入数据
int pos=0; //待插入数据位置
while(!n)
{
printf("请输入一个正整数:\n");
scanf("%d",&n);
}
arr=(int *)malloc(sizeof(int)*n);//申请数组空间
if(arr==NULL)
{
printf("申请内存失败,程序异常退出!\n");
exit(-1);
}
printf("请为数组输入%d个整数:\n",n);
for(;i<n;i++)
scanf("%d",&arr[i]);//为数组赋值
bubble_sort(arr,n);//排序
for(i=0;i<n;i++)
printf("%d\t",arr[i]);
printf("\n");
printf("请输入任意一个整数:\n");
scanf("%d",&x);//为待插入数据赋值
arr=(int *)realloc(arr,sizeof(int)*(n+1));//调整数组大小,加1
pos=midsearch(arr,n,x);
for(i=n;i>pos;i--)
arr[i]=arr[i-1];//调整插入位置后的数组元素
arr[pos]=x;
printf("插入数据后:\n");
for(i=0;i<n+1;i++)
printf("%d\t",arr[i]);
printf("\n");
if(arr!=NULL)
{
free(arr);
arr=NULL;
}
return 0;
}
//冒泡法排序
void bubble_sort(int a[], int n)
{
int i, j, temp;
for (j = 0; j < n - 1; j++)
for (i = 0; i < n - 1 - j; i++)
{
if(a[i] > a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}

//二分法查找插入位置
int midsearch(int a[],int n,int x)
{
int lo, hi, mid;//lo、hi、mid分别表示数组的低、中、高下标
lo = 0;
hi = n;
if(n==1)
{
return 1;
}

while(lo < hi)
{
mid = (hi + lo)/2;
if(x <= a[mid] && x>=a[mid-1])
return mid;
if(x < a[mid])
hi = mid;
else if(x > a[mid])
lo= mid +1;
}
}

函数void *malloc( size_t size );函数指向一个大小为size的空间,如果错误发生返回NULL。存储空间的指针必须为堆,不能是栈。这样以便以后用free函数释放空间。
void *realloc( void *ptr, size_t size );函数将ptr
对象的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸都可以,小于原尺寸会造成数据丢失。
返回值是指向新空间的指针,如果错误发生返回NULL。

假如你要插入一个n 你先找到第一个比n大的数,
然后先把后面的数都往后移,然后把n放进来

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

题目给出的条件试“已经排好序的整形数组”
我们将不关心它的元素试如何输入,以及它试如何被排序的,那试另外的问题!


在c语言里怎么把一个英语单词赋值给一个字母
在c语言里怎么把一个英语单词赋值给一个字母 如把apple给a 应该是赋值变数,比如说将June这个单词赋给变数month。步骤如下: #include <string.h> char month[10]; strcpy(month, "June"); 将确定的数值赋给变数的语句叫做赋值语句。各程式设计语言有自己的赋值语句;赋值语句也有不同的型别...

C语言中如何把十六进制或八进制的值赋给一个变量?
怎样把一个十六进制的值赋给一个变量?c语言支持二进制、八进制、十进制和十六进制的计数系统,在表示一个数字时,用某个特殊的字符来区别其所属的计数系统是必要的。在表示二进制数时,要在数字的末尾加上“b”(如101b);在表示八进制数时,要使用反斜杠(如\014);在表示十六制数时,要使用“0x...

c语言中如何把一个一维数组的元素值换成另一个
首先你应该让电脑知道M是位于数组的哪个元素。你应该先找到他。然后你用K赋值给他就可以替换了……语句应该是这样的 fot(i=0;i<10;i++){if(a[i]==M) \/\/找元素 {a[i]=K;break;} \/\/修改值。修改完毕后退出循环后面的就不用找了……如果你要把里面重复的都换的话那么把break;去掉...

C语言编程,编程实现怎样将一个数组逆序输出?
数组逆序输出,只要从数组最后一位向前循环输出即可。实现代码如下:include"stdio.h"void main(){int a[100],n,m;printf("请输入元素的个数:");scanf("%d",&n);printf("请依次输入%d个数:",n);for(m=0;m<n;m++)scanf("%d",&a[m]);printf("按逆序输出为:");for(m=n-1;m>=0...

在JavaScript 中,怎样把一个对象转化成 JSON 字符串
JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集。正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中。eval函数 JSON文本转换为对象 为了将JSON文本转换为对象,可以使用eval函数。eval函数调用JavaScript编辑器。由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象...

C语言中,如果把一个字节赋值给一个位会程序会怎样执行?
C语言内存存储跟操作系统关系非常大,因此对于一个变量(int,double等等)的内存存储都有大小端的问题,但是对于一个字节的来说,不存在大小端问题。因此对于一个字节赋值给一个位,其实就是一个内存截取的过程,例如:include<stdio.h> typedef struct { char a;int b:1;}TEST;int main(){ TEST ...

SQL如何将一个查到的结果加入到另一个数据库?
如今无论是像Oracle ,Sybase,Informix,SQL server这些大型的资料库管理系统,还是像Visual Foxporo,PowerBuilder这些微机上常用的资料库开发系统,都支援SQL语言作为查询语言。如何将 一个数据库同步到另一个数据库 1.直接方法,将需要的查询的资料赋值到excel中。相应调整,然后再赋值到目标表中(对于资料...

c语言中,能将一个字符转化成一个具有数学意义的符号?如char=\\'+\\...
完整程序如下,你可以验证一下:include <stdio.h> int main(void){ char operator;int operand1, operand2, res;int repeat, ri;scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){ scanf("%d", &operand1);operator = getchar();res=operand1;while((operator=getchar())!

C语言问题,怎样将字符串数组中的一个元素赋给另一个字符串数组中的某...
字符串 赋给 字符串,要用 strcpy() 这类函数, 例如:char str1[2][10],str2[2][10]={"ABCDEFG", "01234567"};strcpy(str1[1], str2[0]);strcpy(str1[0], str2[1]);printf("%s %s", str1[0],str1[1]);--- 字符数组中的一个元素, 赋给另一个字符数组中的一个元素:inc...

C语言中先把一个数据赋初值,之后又把它赋了另一个值,怎样才能让数据返回...
int a=3;int b=a; \/\/用b保存a的值;...a=120; \/\/把a赋了另一个值 ...a=b; \/\/让数据返回原来的值

颍东区17249056741: C语言如何把一个整数按大小顺序插入已排好序的数组中? -
法虾澳扶: 第一种方法 main(){ int i,j,p,n,s,a[11]={127,6,3,28,68,87,105,54,162,18}; for(i=0;i<10;i++) { for(j=i+1;j<10;j++) if(a[i]<=a[j]) p=a[i],a[i]=a[j],a[j]=p; } printf("输入参与排序的数字:"); scanf("%d",&n); a[10]=n; for(i=0;i<11;i++)if(a[10]>a[i]) p=a[i],a[i...

颍东区17249056741: C语言中,怎样把一个整数按大小顺序插入已经排好序的整形数组中? -
法虾澳扶: /*整体思路是先将输入的十个数从小到大排列好,然后再将单独输入的数与数组比较大小并将其插入数组中,这部分是关键.需要注意的是我们在刚开始时将数组长度定义为11,就是为后面插入一个数预留的空位*/#include <stdio.h> void main() ...

颍东区17249056741: C语言整数大小排列 -
法虾澳扶: #include <stdio.h> main() { int a,b,c,temp;//a b c 分别保存三个整数,temp交换中介 printf("请输入三个整数:"); scanf("%d%d%d",&a,&b,&c);//输入三个整数 if(a<b)//排序 { temp=b; b=a; a=temp; } if(a<c) { temp=c; c=a; a=temp; } if(b<c) { temp=c; c=b; b=temp; } printf("从大到小依次为:%d,%d,%d\n",a,b,c);//输出 }

颍东区17249056741: 将有限的数按大小顺序输出(c语言中) -
法虾澳扶: 先令一个中间值 t ;然后依次比较a,b,c ;具体过程是这样 先比较a和b的值,如果a大于b,则利用t把a和b进行交换;然后比较a和c的值,如果a大于c,则利用t把a和c的值进行交换;最后比较b和c的值,如果b大于c,则利用t把b和c的值进行交换...

颍东区17249056741: 用C语言编一个程序,要求输入一串数字,按照从小到大的顺序输出,怎么编写啊 -
法虾澳扶: http://wenku.baidu.com/view/a65e6e204b35eefdc8d33390.html

颍东区17249056741: 请问怎么用C语言把一个正整数的每一位从大到小重新排列啊?? -
法虾澳扶: 用个数组保存数字的每位数,然后对数组排序…将数字的每位数取出来的算法为%10,/10

颍东区17249056741: C语言中怎么把三个整数从小到大排列 -
法虾澳扶: 方法如下:1.从控制台读入三个数; 2.实现三个数从小到大排序: (1)将第一个数作为最小数,依次和第二,三个数进行比较.两次比较重如果有任意一个比第一个小,则将两个数交换 ; (2)在(1)步后,得到第一个数为最小数.再将第二个数与第三个数比较大小后即可实现三个数从小到大排序. 拓展资料 两种常用排序方法: 1.选择排序法:从一列数中,选择第一个作为最小数,依次和后面的数进行比较.如有比第一个数小的数,则交换两个数.最后排到该列数都倒数第二个时,这列数就从小到大排好了顺序. 2.冒泡排序法:思路与选择排序法一致.不同的是,冒泡排序将第一个作为最大数,然后再和该数后的数进行比较.

颍东区17249056741: C语言 要求输入10个,将它按从大到小排序,再输入一个数插入到排好序的数组中,输出. -
法虾澳扶: 【例】把一个整数按大小顺序插入已排好序的数组中. 为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的.设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数...

颍东区17249056741: c语言:输入一个五位整数将数中的五个数值进行从大到小的顺序排序形成一个新的五位整数并输出这个整数. -
法虾澳扶: #include <stdio.h> struct student {char name[15];struct student *next; };struct student *link(struct student *a, struct student *b) {struct student *p = a;while (p->next)p = p->next;p->next = b; // p->next = b->next; 这里你确定链表是有头指针还是...

颍东区17249056741: C语言分别用选择法和冒泡法将N个数按从大到小顺序排列 -
法虾澳扶: int a[100],i,j,k,temp;选择法: for(i=0;i<N;i++) { k=i; for(j=k+1;j<N;j++) if(a[k]<a[j]) k=j; temp=a[i];a[i]=a[k];a[k]=temp; }冒泡法: for(i=0;i<N;i++) for(j=0;j<N-i;j++) if(a[j]>a[j+1]) { temp=a[j];a[j]=a[j+1];a[j+1]=temp; }

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