北理工数据结构实验 排序

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

本科实验报告实验名称:排序

一、实验目的

2、通过编程、上机调试,进一步理解排序的方法。

3、具体尝试插入排序、快速排序、选择排序的操作步骤。

4、锻炼动手编程,独立思考的能力。

二、实验题目

排序

输入10个数,从插入排序、快速排序、选择排序三类算法中各选一种编程实现

三、实验基础知识

插入排序、快速排序、选择排序三类算法的基本思想

四、实验设计方法

1、概要设计

(1)、插入排序(此次使用直接插入排序)

void InsertionSort ( SqList &L )

{ // 对顺序表L 作直接插入排序。

for ( i=2; i<=L.length; ++i )

if (L.r[i].key < L.r[i-1].key)

{

L.r[0] = L.r[i]; // 复制为监视哨

for ( j=i-1; L.r[0].key < L.r[j].key; -- j )

L.r[j+1] = L.r[j]; // 记录后移

L.r[j+1] = L.r[0]; // 插入到正确位置

}

} // InsertSort

(2)、快速排序(此次用的是起泡排序)

V oid Bubblesort(elem R[],int n)

{

I=n;

While(i>1){

lastExchangeIndex = 1;

for(j=1;j

if(R[j+1].key

swap(R[j],R[j+1]);

lastExchangeIndex =j; //记下进行交换的记录位置}

I=lastExchangeIndex ; //本趟进行过交换的最后一个记录的位置

}//Bubblesort

(3)、选择排序

V oid selectsort(elem r[],int n)

{

//对记录序列r[1..n]作简单选择排序。

for(i=1;i

j=selectminkey(r,i);

//zai r[i..n]中选择关键字最小的记录

if(i!=j) R[i] R[j];

//与第i个记录交换

}

}//selectsort

五、实验结果及数据分析

数据为3 2 4 1 5 0 6 9 8 7的十个数的三种排序方法

1、插入排序

2、快速排序

3、选择排序

六、总结

此次编程实验,较前几次而言稍微简单一点,并且以前用过起泡排序法,所以对排序方面比较熟悉,但是也遇到了一些问题,例如数组下标问题没处理好,让我在编程实践中花费了大量时间检查。

七、附录程序清单

1、插入排序(直接插入排序)

#include

int main()

{

printf("插入排序\n");

int i ,n,k, j,a[10], b[10];

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

{

scanf("%d",&a[i]);

}

b[0]=a[0];

for(i=1;i<10;i++)

{

n=a[i]; //选择一个数插入for(j=0;jb[j];j++); //找到插入位置

for(k=8;k>=j;k--) //将插入位置后的数全部后移一位

b[k+1]=b[k];

b[j]=n; //赋值

}

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

printf("%d ",b[i]); //输出

}

2、快速排序(起泡排序)

#include??

int main()

{

printf("快速排序\n");

int i,j,temp,a[10];

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

scanf("%d",&a[i]);

for(i=0;i<10;i++) //进行十次大循环

{

for(j=0;j<10-i;j++) //每次小循环排列一个数

{

if(a[j]>a[j+1]) //将数较大的和数较小的互换位置

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}}}

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

printf("%d ",a[i]); //输出

return 0;

}

3、选择排序(简单选择排序)

#include

int main()

{

int a[10],i,j,k,temp;

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

scanf("%d",&a[i]);

for ( i=0 ; i<9; i++) //n-1趟排序

{

k=i;

for(j=i+1;j<10;j++) //查找最小记录的位置

if (a[j]

k=j;

if(k!=i) //若无序区第一个元素不是无序区中最小元素,则进行交换

{

temp= a[i];

相关文档
最新文档