文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C程序习题-将一个数插入已排序的数组中[7.4]

C程序习题-将一个数插入已排序的数组中[7.4]

时间:2010-08-05  来源:chengxiaopeng

    已有一个已排序好的数组,今输入一个数要求按原来排序的规律将它插入数组中。     这个题目,首先我们需要确定这个数组是升序,还是降序。如果是升序,可以拿这个数和数组中的数进行比较,如果比数组中的数大,则找下一个,直到不比这个数大的位置,记录此位置。然后将后面的数都向后挪一位,然后将此数插入。即可。当然了,如果此数组是个降序数组,则原理相同,只是比较数组中的数比这个数小。直到找到不比这个数小的,记录此位置。然后将此位置后的数都向后移动一位。然后将此数插入数组中即可。根据上面的原理。编写代码如下:  

#include <stdio.h>
#define N 10

void print_data(int[],int);
void asc_insert(int[],int,int);
void desc_insert(int[],int,int);
int main(int argc, int *argv[])
{
    //int a[N] = {3,6,9,13,16,19,20,36,50}; // asc

    int a[N] = {50,36,20,19,16,13,9,6,3}; //desc

    int ipt_value,i;
    int key = -1,n = N;
    int cur_sort = a[0] < a[1] ? 1 : 0; //1 is asc,0 is desc

    print_data(a,N-1);
    printf("\nplease input a number:");
    scanf("%d",&ipt_value);
    
    if (cur_sort)
    {
          asc_insert(a,N,ipt_value);
          print_data(a,N);
    }
    else
    {
        desc_insert(a,N,ipt_value);
        print_data(a,N);
    }
    
    system("pause");
    return 0;
}

void print_data(int a[],int n)
{
     int i;
     for (i = 0; i < n; i++)
     {
         printf("%d ",a[i]);
     }
}

void asc_insert(int a[],int n,int key)
{
     int i,j;
     int key_point = -1;
     for (i = 0; i < n - 1 ;i++)
     {
          if (key > a[i])
          {
              continue;
          }
          else
          {
              key_point = i;
              break;
          }
      }
      
      if (-1 == key_point)
      {
            a[n-1] = key;
      }
      else
      {
          j = n - 1;
          for (i = n - 2; i >= 0 ; i--)
          {
              if (key_point != i)
              {
                    a[j--] =a[i];
              }
              else
              {
                  a[j--] = a[i];
                  a[j] = key;
                  break;
              }
          }
      }
}

void desc_insert(int a[],int n,int key)
{
     int i,j;
     int key_point = -1;
     
     for (i = 0; i < n - 1; i++)
     {
         if (key < a[i])
         {
                 continue;
         }
         else
         {
             key_point = i;
             break;
         }
     }
     
     if (-1 == key_point)
     {
            a[n-1] = key;
     }
     else
     {
         j = n - 1;
         for (i = n - 2; i >= 0; i--)
         {
             if (i != key_point)
             {
                   a[j--] = a[i];
             }
             else
             {
                 a[j--] = a[i];
                 a[j] = key;
                 break;
             }
         }
     }
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载