基本信息
源码名称:c++ 各种数据结构中的排序完整示例程序
源码大小:0.88M
文件格式:.rar
开发语言:C/C++
更新时间:2016-11-27
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 1 元×
微信扫码支付:1 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
数据结构课程中的各种排序示例完整程序,用C语言实现 各种示例包括:希尔排序、选择排序、插入排序、冒泡排序、快速排序等
//折半插入排序的示例程序
#include<stdio.h>
#define MAXSIZE 20 //顺序表的最大长度
typedef int KeyType; //定义关键字类型为整数类型
typedef char InfoType; //定义其它数据项
typedef struct
{
KeyType key; //关键字项
InfoType otherinfo[20]; //其他数据项
}RedType;
typedef struct
{
RedType r[MAXSIZE 1]; //r[0]闲置或用作哨兵单元
int length; //顺序表长度
}SqList; //顺序表类型
//void InsertSort(SqList &L);
void BInsertSort(SqList *L)
{//折半插入排序
int i, j, low, high, m;
for(i=2; i<L->length; i)
{
L->r[0]=L->r[i]; //将L[i]暂存到L[0]
low=1;
high=i-1;
while(low<=high)
{//在r[low...high]中折半查找有序插入的位置
m=(low high)/2; //折半
if(L->r[0].key<L->r[m].key)
high=m-1; //插入点在低半区
else
low=m 1; //插入点在高半区
}
for(j=i; j>high 1; --j)
L->r[j]=L->r[j-1]; //记录后移
L->r[high 1]=L->r[0]; //插入
}
}
void Input(SqList *L)
{//用以输入该顺序表的内容
char p;
int i=1;
printf("请输入学生姓名:");
scanf("%s", L->r[i].otherinfo);
printf("请输入该生总成绩:");
scanf("%d", &L->r[i].key);
getchar();
i;
printf("是否继续输入(Y/N):");
scanf("%c", &p);
getchar();
while((p=='y')||(p=='Y'))
{
printf("请输入学生姓名:");
scanf("%s", L->r[i].otherinfo);
printf("请输入总成绩:");
scanf("%d", &L->r[i].key);
i;
getchar();
printf("是否继续输入(Y/N):");
scanf("%c", &p);
getchar();
}
L->length=i;
}
void OutPut(SqList *L)
{//用以输出排序后的内容,按关键字排列
int i;
printf("\n按学生总成绩从小到大排列为:\n");
for(i=1; i<L->length; i )
{
printf("%-15s\t%d\n",L->r[i].otherinfo, L->r[i].key);
}
}
int main()
{
SqList L;
Input(&L);
BInsertSort(&L);
OutPut(&L);
return 0;
}