Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2538901
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2010-08-05 11:52:09

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

#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;
             }
         }
     }
}


阅读(4358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~