0
点赞
收藏
分享

微信扫一扫

《数据结构实验5》--排序


/***************
排序操作
一、 实验目的
1.深刻理解排序的定义和各种排序方法的特点;
2.掌握常用的排序方法,并掌握用高级语言实现排序算法的方法。
二、 实现提示
直接插入排序的排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序。
希尔排序的排序过程:先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,
即所有记录放进一个组中排序为止。
三、 实验内容
直接插入排序与希尔排序的实现。
四、程序填空与调试
***************/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 2000//排序表的最大容量
typedef struct //定义排序表的结构
{
int elemword[MAXSIZE]; //数据元素关键字
int count; //表中当前元素的个数
} SqList;
void InitialSqList(SqList&); //初始化排序表
void InsertSort(SqList&); //直接插入排序
void PrintSqList(SqList); //显示表中的所有元素
int main()
{
SqList L; //声明表L
char j='y';
printf("本程序将演示直接插入排序的操作。\n");
while(j!='n'&&j!='N')
{
InitialSqList(L);
InsertSort(L);
PrintSqList(L);
printf("继续进行下一次排序吗?(Y/N)");
scanf(" %c",&j);
}
printf("程序运行结束!\n按任意键关闭窗口!\n");
getchar();
getchar();
}
void InitialSqList(SqList &L)
{
//表初始化
int i;
printf("请输入待排序的记录的个数:");
scanf("%d",&L.count);
printf("请输入待排序的记录的关键字(整型数):\n");
for(i=1; i<=L.count; i++)
scanf("%d",&L.elemword[i]);
}
void InsertSort(SqList &L)
{
//直接插入排序,升序
int i,j;
for(i=2; i<=L.count; i++)
if(L.elemword[i]<L.elemword[i-1]) //"<",需将L.elemword[i]插入有序子表
{
L.elemword[0]=L.elemword[i]; //复制为哨兵
for(j=i-1; L.elemword[0]<L.elemword[j]; --j)
L.elemword[j+1]=L.elemword[j]; //记录后移
L.elemword[j+1]=L.elemword[0]; //插入到正确的位置
}
}
void PrintSqList(SqList L)
{
//显示表所有元素
int i;
printf("已排好序的序列如下:\n");
for(i=1; i<=L.count; i++)
printf("%4d",L.elemword[i]);
printf("\n");
}

运行:


《数据结构实验5》--排序_插入排序




举报

相关推荐

0 条评论