内部排序算法的实现的实验报告

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

}

相关文档
最新文档