资源描述
班级 学号 姓名 实验组别 试验日期 室温 报告日期 成绩 报告内容:(目的和要求、原理、步骤、数据、计算、小结等)实验名称:内部排序算法的实现实验目的;掌握直接插入排序,希尔排序,快速排序的实现。实验环境(硬/软件要求):Windows 2000, Visual C+ 6.0实验内容:对于给定的某无序序列,分别用直接插入,希尔排序,快速排序等方法进行排序,并输出每种排序下的各趟排序结果。各排序算法输入的无序序列为:26 5 37 1 61 11 59 15 48 19。实验要求: 编程实现直接插入排序,希尔排序,快速排序各算法函数;并编写主函数对各排序函数进行测试。【C语言源程序】#include#include#define size 11typedef char datatype; /记录的其他域的类型,根据需要更改typedef structint key;datatype others; / 记录的其他域 rectype; /*为插入排序算法*/void INSERTSORT(rectype R ) /对数组R按递增序进行插入排序, R0是监视哨 int i, j;for (i=2; i=size; i+) /依次插入R2, , Rn R0=Ri; j=i-1; while (R0.key0) for (j=h; j=0)&temp.key=temp.key) & (ij)j-; /* 从右向左扫描,查找第一个关键字小于temp.key的记录 */if (ij) Ri+=Rj; /* 交换Ri和Rj */while (Ri.key=temp.key) & (ij)i+; /* 从左向右扫描,查找第一个关键字大于temp.key的记录 */if (ij) Rj-=Ri; /* 交换Ri和Rj */ while (i!=j); Ri=temp; /* 基准temp已被最后定位 */ return i; /* PARTITION */void QUICKSORT(rectype R , int s1, int t1) /* 对Rs1Rt1做快速排序 */ int i; if (s1t1) /* 只有一个记录或无记录时无须排序 */ i=PARTITION(R, s1, t1); /* 对Rs1Rt1作划分 */ QUICKSORT(R, s1, i-1); /* 递归处理左区间 */ QUICKSORT(R, i+1, t1); /* 递归处理右区间 */ /* QUICKSORT */ /*主函数*/void main()rectype Rsize;int i;/*插入排序*/printf(请输入使用插入算法排序的10个数据n);for(i=1;isize;i+)scanf(%d,&Ri.key );printf(n插入排序之前n);for(i=1;isize;i+)printf(%dt,Ri.key );INSERTSORT(R) ;printf(n插入排序之后n);for(i=1;isize;i+)printf(%dt,Ri.key );/*希尔排序*/printf(n请输入使用希尔算法排序的10个数据n);for(i=0;isize-1;i+)scanf(%d,&Ri.key );printf(n希尔排序之前n);for(i=0;isize-1;i+)printf(%dt,Ri.key );SHELLSORT(R,10);printf(n希尔排序之后n);for(i=0;isize-1;i+)printf(%dt,Ri.key );/*快速排序*/printf(请输入使用快速算法排序的10个数据n);for(i=1;isize;i+)scanf(%d,&Ri.key );printf(n快速排序之前n);for(i=1;isize;i+)printf(%dt,Ri.key );QUICKSORT(R,1,10) ;printf(n快速排序之后n);for(i=1;isize;i+)printf(%dt,Ri.key );
展开阅读全文