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