内部排序算法的实现的实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级学号姓名实验组别
试验日期室温报告日期成绩
报告内容:(目的和要求、原理、步骤、数据、计算、小结等)
实验名称:内部排序算法的实现
实验目的;
掌握直接插入排序,希尔排序,快速排序的实现。
实验环境(硬/软件要求):
Windows 2000, Visual C++ 6.0
实验内容:
对于给定的某无序序列,分别用直接插入,希尔排序,快速排序等方法进行排序,并输出每种排序下的各趟排序结果。
各排序算法输入的无序序列为:26 5 37 1 61 11 59 15 48 19。
实验要求:
编程实现直接插入排序,希尔排序,快速排序各算法函数;并编写主函数对各排序函数进行测试。
【C语言源程序】
#include
#include
#define size 11
typedef char datatype; //记录的其他域的类型,根据需要更改
typedef struct
{ int key;
datatype others; // 记录的其他域
} rectype;
//*为插入排序算法*/
void INSERTSORT(rectype R[ ]) //对数组R按递增序进行插入排序, R[0]是监视哨
{ int i, j;
for (i=2; i<=size; i++) //依次插入R[2], …, R[n]
{ R[0]=R[i];
j=i-1;
while (R[0].key { R[j+1]=R[j]; j--; } //将关键字大于R[i].key的记录后移 R[j+1]=R[0]; //插入R[i] } } /*希尔排序算法*/ void SHELLSORT(rectype R[ ], int n) { int i, j, h; rectype temp; h=n/2; while(h>0) { for (j=h; j<=n-1; j++) /* R[h+d]~R[n+d-1]插入当前有序区*/ {temp=R[j]; /* 保存待插入记录*/ i=j-h; while ((i>=0)&&temp.key { R[i+h]=R[i]; /* 后移记录*/ i=i-h; /* 得到前一记录位置*/ } R[i+h]=temp; /* 插入R[i] */ } /* 本趟排序完成*/ h=h/2; } /* 增量为1排序后终止算法*/ } /* SHELLSORT */ /*快速排序算法*/ int PARTITION(rectype R[ ], int l, int h) /* 返回划分后被定位的基准记录的位置*/ /* 对无序区R[l]~R[h]做划分*/ { int i, j; rectype temp; i=l; j=h; temp=R[i]; /* 初始化,temp为基准*/ do { while ((R[j].key>=temp.key) && (i j--; /* 从右向左扫描,查找第一个关键字小于temp.key的记录*/ if (i while ((R[i].key<=temp.key) && (i i++; /* 从左向右扫描,查找第一个关键字大于temp.key的记录*/ if (i } while (i!=j); R[i]=temp; /* 基准temp已被最后定位*/ return i; } /* PARTITION */ void QUICKSORT(rectype R[ ], int s1, int t1) /* 对R[s1]~R[t1]做快速排序*/ { int i; if (s1 { i=PARTITION(R, s1, t1); /* 对R[s1]~R[t1]作划分*/ QUICKSORT(R, s1, i-1); /* 递归处理左区间*/ QUICKSORT(R, i+1, t1); /* 递归处理右区间*/ } } /* QUICKSORT */ /*主函数*/ void main() { rectype R[size]; int i; /*插入排序*/ printf("请输入使用插入算法排序的10个数据\n"); for(i=1;i scanf("%d",&R[i].key ); printf("\n插入排序之前\n"); for(i=1;i printf("%d\t",R[i].key ); INSERTSORT(R) ; printf("\n插入排序之后\n"); for(i=1;i printf("%d\t",R[i].key ); /*希尔排序*/ printf("\n请输入使用希尔算法排序的10个数据\n"); for(i=0;i scanf("%d",&R[i].key ); printf("\n希尔排序之前\n"); for(i=0;i printf("%d\t",R[i].key ); SHELLSORT(R,10); printf("\n希尔排序之后\n"); for(i=0;i printf("%d\t",R[i].key ); /*快速排序*/ printf("请输入使用快速算法排序的10个数据\n"); for(i=1;i scanf("%d",&R[i].key ); printf("\n快速排序之前\n"); for(i=1;i printf("%d\t",R[i].key ); QUICKSORT(R,1,10) ; printf("\n快速排序之后\n"); for(i=1;i printf("%d\t",R[i].key ); }