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

来源:互联网 发布:淘宝刷单新规则 编辑:程序博客网 时间:2024/06/05 19:04
/*  
 * Copyright (c) 2016, 烟台大学计算机与控制工程学院  
 * All rights reserved。  
 * 文件名称 :1.cpp  
 * 作    者 :杨俊杰 
 * 完成日期 :2016年 12月15日  
 * 版 本 号 :v1.0  
 * 问题描述 :
 * 输出描述 :

 */

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //1.直接插入排序  
  2. #include <stdio.h>  
  3. #define MaxSize 20  
  4. typedef int KeyType;    //定义关键字类型  
  5. typedef char InfoType[10];  
  6. typedef struct          //记录类型  
  7. {  
  8.     KeyType key;        //关键字项  
  9.     InfoType data;      //其他数据项,类型为InfoType  
  10. } RecType;              //排序的记录类型定义  
  11.   
  12. void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序  
  13. {  
  14.     int i,j;  
  15.     RecType tmp;  
  16.     for (i=1; i<n; i++)  
  17.     {  
  18.         tmp=R[i];  
  19.         j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置  
  20.         while (j>=0 && tmp.key<R[j].key)  
  21.         {  
  22.             R[j+1]=R[j]; //将关键字大于R[i].key的记录后移  
  23.             j--;  
  24.         }  
  25.         R[j+1]=tmp;      //在j+1处插入R[i]  
  26.     }  
  27. }  
  28.   
  29. int main()  
  30. {  
  31.     int i,n=10;  
  32.     RecType R[MaxSize];  
  33.     KeyType a[]= {9,8,7,6,5,4,3,2,1,0};  
  34.     for (i=0; i<n; i++)  
  35.         R[i].key=a[i];  
  36.     printf("排序前:");  
  37.     for (i=0; i<n; i++)  
  38.         printf("%d ",R[i].key);  
  39.     printf("\n");  
  40.     InsertSort(R,n);  
  41.     printf("排序后:");  
  42.     for (i=0; i<n; i++)  
  43.         printf("%d ",R[i].key);  
  44.     printf("\n");  
  45.     return 0;  
  46. }  

运行结果:


[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. //2.显示直接插入排序过程  
  2. #include <stdio.h>  
  3. #define MaxSize 20  
  4. typedef int KeyType;    //定义关键字类型  
  5. typedef char InfoType[10];  
  6. typedef struct          //记录类型  
  7. {  
  8.     KeyType key;        //关键字项  
  9.     InfoType data;      //其他数据项,类型为InfoType  
  10. } RecType;              //排序的记录类型定义  
  11.   
  12. void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序  
  13. {  
  14.     int i,j,k;  
  15.     RecType tmp;  
  16.     for (i=1; i<n; i++)  
  17.     {  
  18.         tmp=R[i];  
  19.         j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置  
  20.         while (j>=0 && tmp.key<R[j].key)  
  21.         {  
  22.             R[j+1]=R[j]; //将关键字大于R[i].key的记录后移  
  23.             j--;  
  24.         }  
  25.         R[j+1]=tmp;      //在j+1处插入R[i]  
  26.         printf("i=%d: ",i);  
  27.         for (k=0; k<n; k++)  
  28.             printf("%d ",R[k].key);  
  29.         printf("\n");  
  30.     }  
  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.     InsertSort(R,n);  
  45.     printf("排序后:");  
  46.     for (i=0; i<n; i++)  
  47.         printf("%d ",R[i].key);  
  48.     printf("\n");  
  49.     return 0;  
  50. }  
运行结果:


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

运行结果:


0 0
原创粉丝点击