折半插入排序(C语言版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
折半查找插入排序
1.实验目的
本实验将通过实验实例和程序设计练习,达到如下目的:
通过实验掌握二分排序的基本概念,掌握二分排序的基本思想和算法实现。
2.实验内容
本实验的内容包括:
设计一个算法用二分查找实现插入排序的“寻找插入位置”操作。
3.实验要求
二分查找:在有序表中进行,先确定表的中点位置,再通过比较确定下一步查找哪个半区。
以下是我根据严蔚敏教材数据结构(C语言版)自己编写的程序,在程序运行时根据提示随便输入一组数,并以-1结束,程序在TC2.01版本上运行无误,
#include
#define MAX 100
typedef struct {
int elem[MAX];
int length;
}SSTable;
void BInsertSort(SSTable *L);
int main(){
int m,i=1,a,k;
SSTable ST;
printf("Please input those numbers and press \"-1\" to end!\n");
scanf(" %d",&a);
while(a!=-1){
ST.elem[i++]=a;
scanf(" %d",&a);
}
ST.length=i-1;
BInsertSort(&ST);
printf("The result is:\n");
for(m=1;m<=ST.length;m++)
printf(" %5d",ST.elem[m]);
getch();
}
void BInsertSort(SSTable *L){
int i,low,high,m,j;
for(i=2;i<=(L->length);++i){
(*L).elem[0]=(*L).elem[i];
low=1;high=i-1;
while(low<=high){
m=(low+high)/2;
if((*L).elem[0]<(*L).elem[m])
high=m-1;
else low=m+1;
}
for(j=i-1;j>=high+1;--j)
(*L).elem[j+1]=(*L).elem[j];
(*L).elem[high+1]=(*L).elem[0];
}
}