实验6:至少三种排序算法的程序实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构与算法》课程实验报告(6)

实验题目:实验6:至少三种排序算法的程序实现

一、实验目的

1.掌握简单插入排序、希尔排序、冒泡排序、快速排序、堆排序以及归并排序的算法并加以应用。

2.对各种查找、排序技术的时间、空间复杂性有进一步认识。

二、实验要求

1.认真阅读和掌握和本实验相关的教材内容。

2.编写完整程序完成下面的实验内容并上机运行。

3.整理并上交实验报告。

三、实验内容

编写程序实现下述六种算法至少三种,并用以下无序序列加以验证:49,38,65,97,76,13,27,49

1.简单插入排序

2.希尔排序

3. 冒泡排序

4.快速排序

5.归并排序

6.堆排序

四、源代码与结果:

1、简单插入排序:

源代码:

#include

void InsertSort(int r[],int n);

int main()

{

int r[]={49,38,65,97,76,13,27,49};

cout<<"直接插入排序:"<

InsertSort(r,8);

for(int i=0;i<8;i++)

{

cout<

}

cout<

return 0;

}

void InsertSort(int r[],int n)

{

for(int i=1;i

{

for(int j=i-1,s=r[i];s=0;j--)

{

r[j+1]=r[j];

}

r[j+1]=s;

}

}

运行结果:

2.希尔排序:

#include

void ShellSort(int r[],int n);

int main()

{

int r[]={49,38,65,97,76,13,27,49};

cout<<"希尔排序:"<

ShellSort(r,8);

for(int i=0;i<8;i++)

cout<

}

cout<

return 0;

}

void ShellSort(int r[],int n)

{

int step=n/2;

while(step >= 1)

{

for(int i=step;i

{

for(int j=i-step,s=r[i];s=0;j-=step)

{

r[j+step]=r[j];

}

r[j+step]=s;

}

step/=2;

}

}

运行结果:

3、冒泡排序:

源代码:

//起泡法排序:

#include

#define N 8 //N为数的总个数

void BubbleSort(int r[],int n);

int main()

{

int i;

int a[N];

cout<<"请输入"<

for(i=0;i

cin>>a[i];

}

cout<<"冒泡排序结果:"<

BubbleSort(a,N);

for(i=0;i

{

cout<

}

cout<

return 0;

}

void BubbleSort(int r[],int n)

{

for(int i=0;i

{

for(int j=0;j

{

if(r[j]>r[j+1])

{

int temp=r[j];

r[j]=r[j+1];

r[j+1]=temp;

}

}

}

}

运行结果:

4、快速排序:

#include

int Partition(int r[],int low,int high);

void QuickSort(int r[],int low,int high);

int main()

{

int r[]={49,38,65,97,76,13,27,49};

cout<<"快速排序:"<

QuickSort(r,0,10-1);

for(int i=0;i<10;i++)

cout<

}

cout<

return 0;

}

int Partition(int r[],int low,int high)

{

int pivotkey=r[low];

int i=low;

int j=high;

while(i

{

while(ipivotkey) j--;

if(i

while(i

if(i

}

r[j]=pivotkey;

return j;

}

void QuickSort(int r[],int low,int high)

{

if(low

{

int pivot=Partition(r,low,high);

QuickSort(r,low,pivot-1);

QuickSort(r,pivot+1,high);

}

}

运行结果:

五、思考与提高

1.设有1000个无序的元素,希望用最快的速度挑出其中前10个最大的元素,采用哪一种排序方法最好?为什么?

答:用堆排序最合适,因为不必等全部元素排完就能得到所需结果,

相关文档
最新文档