问题及代码:
/**Copyright (c) 2016, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:main.cpp
* 作者:张冰
* 完成日期:2016年12月15日
* 版本号:code ::Block 12.11
* 问题描述:验证折半插入排序算法
* 输入描述:无
* 程序输出:输出排序前和排序后的序列
*/
- #include <stdio.h>
- #define MaxSize 20
- typedef int KeyType;
- typedef char InfoType[10];
- typedef struct
- {
- KeyType key;
- InfoType data;
- } RecType;
-
- void InsertSort1(RecType R[],int n)
- {
- int i,j,low,high,mid;
- RecType tmp;
- for (i=1; i<n; i++)
- {
- tmp=R[i];
- low=0;
- high=i-1;
- while (low<=high)
- {
- mid=(low+high)/2;
- if (tmp.key<R[mid].key)
- high=mid-1;
- else
- low=mid+1;
- }
- for (j=i-1; j>=high+1; j--)
- R[j+1]=R[j];
- R[high+1]=tmp;
- }
- }
- 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");
- InsertSort1(R,n);
- printf("排序后:");
- for (i=0; i<n; i++)
- printf("%d ",R[i].key);
- printf("\n");
- return 0;
- }
运行结果: