折半插入排序(C语言版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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];

}

}

相关文档
最新文档