黑马程序员技术交流社区

标题: 在一个排好序的数组中,输入一个数,按排序的顺序的规... [打印本页]

作者: 该有个目标了    时间: 2014-8-21 23:48
标题: 在一个排好序的数组中,输入一个数,按排序的顺序的规...
在一个排好序的数组中,输入一个数,按排序的顺序的规律将它插入到数组中

#include<stdio.h>
int main()
{
    int a[6] = {1,3,6,7,9};
    int i,j,x;
    printf("insert data:");
    scanf("%d",&x);
    for(i=0;i<5;i++)
        if(x<a)   
            break;   
    for(j=5;j>i;j--)   //重这以后就看不懂了 求 高人 指点 ,要精辟点的,最好能用白话,不要专业术语。
        a[j]=a[j-1];  
    a[j]=x;   
    printf("Now array a:\n");
    for(i=0;i<6;i++)   
        printf("%4d",a);
    printf("\n");  
    return 0;

}


作者: 爱情路13号    时间: 2014-8-22 01:16
你确定这是正确的代码么?以后用到C语言排序直接用冒泡排序。
作者: 小月格子猫    时间: 2014-8-22 01:30
本帖最后由 小月格子猫 于 2014-8-22 01:33 编辑

稍等一下,我整理一下
作者: 曹雨    时间: 2014-8-22 04:29
第一个for找出i位置,第二个是把数组从最后一个数开始直到i+1 都向后移一位。然后将数插入i处。第三个for输出。懂不?现在我用的手机。不懂回复我。中午用电脑给你回
作者: 王振宇351x    时间: 2014-8-22 08:37
曹雨 发表于 2014-8-22 04:29
第一个for找出i位置,第二个是把数组从最后一个数开始直到i+1 都向后移一位。然后将数插入i处。第三个for输 ...
  1. int main(){
  2.     int a[6] = {1,3,6,7,9};
  3.     int i,j,x;
  4.     printf("insert data:");
  5.     scanf("%d",&x);
  6.     for(i=0;i<5;i++){
  7.         if(x<a[i]) // 原来少了[i]!!
  8.             break; //  让循环在i比a大的时候,停止.  这个时候就是..{1,3,6,7,9},,,i指向比x大的数所在的位置.
  9.     }
  10.     for(j=5;j>i;j--){
  11.         a[j]=a[j-1];    // 从最后一位开始,把所有的数都赋值给后一位,当比x大的数后移一位的时候,停止.
  12.     }
  13.     a[j]=x;            //  将x赋值到,第i位数.  此时,就完成.
  14.    
  15.     printf("Now array a:\n");
  16.     for(i=0;i<6;i++)
  17.         printf("%4d",a[i]);  //  少了[i].输出数组
  18.     printf("\n");  
  19.     return 0;
  20.    
  21. }
复制代码

作者: 王振宇351x    时间: 2014-8-22 08:38
呵呵,, 点错了..
作者: ★彬★卍囧神    时间: 2014-8-22 11:27
修改,插入代码格式
作者: qq541955920    时间: 2014-8-22 11:45
看了看前面的  if(x<a[i] )少个i  。看了半天没看懂。  再往下看就好多了
作者: 十指紧扣    时间: 2014-8-22 11:54
求解……………………………………
作者: 从今以后    时间: 2014-8-22 14:04
谢谢楼上解答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2