数据结构实验报告记录(四):实现典型的排序算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告记录(四):实现典型的排序算法
————————————————————————————————作者:————————————————————————————————日期:
佛山科学技术学院
实验报告
课程名称数据结构
实验项目实现典型的排序算法
专业班级 10网络工程2 姓名张珂卿学号 2010394212
指导教师成绩日期 2011.11.27
一、实验目的
1.掌握排序的基本概念;
2.熟悉排序中使用的存储结构,掌握多种排序算法,如堆排序、希尔排序、快速排序算法等。
二、实验内容
1.几种典型的排序算法;
2.计算不同的排序算法的时间复杂度;
3.判定某种排序算法是否稳定的标准。
三、实验原理
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。
四、实验步骤
1.输入记录的基本结点与信息,选用相关的存储结构,完成记录的存储、输入的初始化工作。
2.选择“直接插入排序”,“希尔排序”,“快速排序”,“简单选择排序”和“堆排序”几种排序中的任意三种排序,编程实现排序算法。用菜单形式选择排序方法,并显示排序过程和排序结果。
3.计算排序算法的时间复杂度并进行稳定性分析。
五、程序源代码及注释
#include"iostream"
using namespace std;
#define MAX_NO_OF_KEY 8
#define RADIX 10 //关键字基数
#define MAX_SPACE 1000
typedef struct
{
int keys[MAX_NO_OF_KEY];//关键字
int data;//其他数据项
int next;
}SLCell;
typedef struct
{
SLCell r[MAX_SPACE];//静态链表可利用空间
int keynum;//记录的当前关键字个数
int recnum;//静态链表的当前长度
}SLList;
typedef int ArrType[RADIX];//指针数组类型
int len;//数组长度
//插入排序
void DirectInsertSort(int Elem_Arr[])
{
int i,j;
for(i=2;i { Elem_Arr[0]=Elem_Arr[i]; for(j=i-1;j>=1;j--) if(Elem_Arr[0] Elem_Arr[j+1]=Elem_Arr[j]; else break; Elem_Arr[j+1]=Elem_Arr[0]; } } //希尔排序 void ShellInsert(int Elem_Arr[],int add)//add为某趟希尔排序的增量{ int i,j; for(i=add+1;i { Elem_Arr[0]=Elem_Arr[i]; for(j=i-add;j>0&&Elem_Arr[j]>Elem_Arr[0]; j-=add) Elem_Arr[j+add]=Elem_Arr[j]; Elem_Arr[j+add]=Elem_Arr[0]; } } void ShellSort(int Elem_Arr[]) { int t; cout<<"请输入增量数组元素个数:"< cin>>t; int *dlta=new int[t]; cout<<"请依次输入增量数组元素:"< for(int i=0;i cin>>dlta[i]; for(int k=0;k ShellInsert(Elem_Arr,dlta[k]);//一趟增量为dlta[k]的插入排序 } //快速排序 int Partition(int Elem_Arr[],int i,int j)//实现一分为二,pivotkey为枢轴变量{ int pivotkey; pivotkey=Elem_Arr[i]; while(i { while(i --j; Elem_Arr[i]=Elem_Arr[j]; while(i ++i; Elem_Arr[j]=Elem_Arr[i]; } Elem_Arr[i]=pivotkey; return i; }//Partition void QSort(int Elem_Arr[],int low,int high) { int pivotloc; if(low {