第16周项目1-验证算法(1)直接插入排

  1. Copyright (c)2016,烟台大学计算机与控制工程学院  
  2. * All rights reserved.  
  3. * 文件名称:项目1-1.cbp  
  4. * 作    者:王婧  
  5. * 完成日期:2016年12月15日  
  6. * 版 本 号:v1.0  
  7.   
  8. * 问题描述: 验证直接插入排序 
  9.   
  10. * 输入描述:无  
  11. * 程序输出:测试数据  
    1. #include <stdio.h>  
    2. #define MaxSize 20  
    3. typedef int KeyType;    //定义关键字类型  
    4. typedef char InfoType[10];  
    5. typedef struct          //记录类型  
    6. {  
    7.     KeyType key;        //关键字项  
    8.     InfoType data;      //其他数据项,类型为InfoType  
    9. } RecType;              //排序的记录类型定义  
    10.   
    11. void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序  
    12. {  
    13.     int i,j;  
    14.     RecType tmp;  
    15.     for (i=1; i<n; i++)  
    16.     {  
    17.         tmp=R[i];  
    18.         j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置  
    19.         while (j>=0 && tmp.key<R[j].key)  
    20.         {  
    21.             R[j+1]=R[j]; //将关键字大于R[i].key的记录后移  
    22.             j--;  
    23.         }  
    24.         R[j+1]=tmp;      //在j+1处插入R[i]  
    25.     }  
    26. }  
    27.   
    28. int main()  
    29. {  
    30.     int i,n=10;  
    31.     RecType R[MaxSize];  
    32.     KeyType a[]= {9,8,7,6,5,4,3,2,1,0};  
    33.     for (i=0; i<n; i++)  
    34.         R[i].key=a[i];  
    35.     printf("排序前:");  
    36.     for (i=0; i<n; i++)  
    37.         printf("%d ",R[i].key);  
    38.     printf("\n");  
    39.     InsertSort(R,n);  
    40.     printf("排序后:");  
    41.     for (i=0; i<n; i++)  
    42.         printf("%d ",R[i].key);  
    43.     printf("\n");  
    44.     return 0;  

    1. #include <stdio.h>  
      #define MaxSize 20  
      typedef int KeyType;    //定义关键字类型  
      typedef char InfoType[10];  
      typedef struct          //记录类型  
      {  
          KeyType key;        //关键字项  
          InfoType data;      //其他数据项,类型为InfoType  
      } RecType;              //排序的记录类型定义  
        
      void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序  
      {  
          int i,j,k;  
          RecType tmp;  
          for (i=1; i<n; i++)  
          {  
              tmp=R[i];  
              j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置  
              while (j>=0 && tmp.key<R[j].key)  
              {  
                  R[j+1]=R[j]; //将关键字大于R[i].key的记录后移  
                  j--;  
              }  
              R[j+1]=tmp;      //在j+1处插入R[i]  
              printf("i=%d: ",i);  
              for (k=0; k<n; k++)  
                  printf("%d ",R[k].key);  
              printf("\n");  
          }  
      }  
        
      int main()  
      {  
          int i,n=10;  
          RecType R[MaxSize];  
          KeyType a[]= {9,8,7,6,5,4,3,2,1,0};  
          for (i=0; i<n; i++)  
              R[i].key=a[i];  
          printf("排序前:");  
          for (i=0; i<n; i++)  
              printf("%d ",R[i].key);  
          printf("\n");  
          InsertSort(R,n);  
          printf("排序后:");  
          for (i=0; i<n; i++)  
              printf("%d ",R[i].key);  
          printf("\n");  
          return 0;  
      }  


      1. #include <stdio.h>  
      2. #define MaxSize 20  
      3. typedef int KeyType;    //定义关键字类型  
      4. typedef char InfoType[10];  
      5. typedef struct          //记录类型  
      6. {  
      7.     KeyType key;        //关键字项  
      8.     InfoType data;      //其他数据项,类型为InfoType  
      9. } RecType;              //排序的记录类型定义  
      10.   
      11. void InsertSort1(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序  
      12. {  
      13.     int i,j,low,high,mid;  
      14.     RecType tmp;  
      15.     for (i=1; i<n; i++)  
      16.     {  
      17.         tmp=R[i];  
      18.         low=0;  
      19.         high=i-1;  
      20.         while (low<=high)  
      21.         {  
      22.             mid=(low+high)/2;  
      23.             if (tmp.key<R[mid].key)  
      24.                 high=mid-1;  
      25.             else  
      26.                 low=mid+1;  
      27.         }  
      28.         for (j=i-1; j>=high+1; j--)  
      29.             R[j+1]=R[j];  
      30.         R[high+1]=tmp;  
      31.     }  
      32. }  
      33. int main()  
      34. {  
      35.     int i,n=10;  
      36.     RecType R[MaxSize];  
      37.     KeyType a[]= {9,8,7,6,5,4,3,2,1,0};  
      38.     for (i=0; i<n; i++)  
      39.         R[i].key=a[i];  
      40.     printf("排序前:");  
      41.     for (i=0; i<n; i++)  
      42.         printf("%d ",R[i].key);  
      43.     printf("\n");  
      44.     InsertSort1(R,n);  
      45.     printf("排序后:");  
      46.     for (i=0; i<n; i++)  
      47.         printf("%d ",R[i].key);  
      48.     printf("\n");  
      49.     return 0;  
      50. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值