北航计软实验报告实验三

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3)针对所有的元素重复以上的步骤,除了最后一个。
4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2.快速排序
1)设置两个变量i、j,排序开始的时候: i=0, j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
实验报告
实验名称冒泡排序和快速排序
班级
学号
姓名
成绩
实验概述:
【实验目的及要求】
通过编程程序达到熟悉并掌握教材中所介绍的几种排序方法。
【实验原理】
1.冒泡排序
1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
b[i]=num;
}
printf("随机数产生完成\n");
for (i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n\n");
system("pause");
printf("\n\n");
com=0;
mov=0;
for (i=0;i<N;i++)
{
for (j=0;j<N-1;j++)
{
l++;
com++;
}
b[r]=b[l];
mov++;
}
b[r]=key;
mov++;
quicksort(s,l-1);
quicksort(r+1,w);
}
(三)运行结果
【小结】
通过本次试验,我巩固了随机数的生成方法,熟悉了冒泡排序和快速排序的方法,了解了它们的算法原理,比较次数与移动次数的不同。
{
com++;
if (a[j]>a[j+1])
{
num=a[j];
a[j]=a[j+1];
a[j+1]=num;
mov+=3;
}
}
}
printf("冒泡排序完成\n");
for (i=0;i<N;i++) printf("%d",a[i]);
printf("\n比较%d次,移动%d次(交换%d次)。",com,mov,mov/3);
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j;(3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1, i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外, i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
}
void quicksort(int s,int w)
{
int key;
int l,r;
if (s>=w)
return;
l=s;
r=w;
key=b[l];
while(l<r)
{
while ((b[r]>=key)&&(l<r))
{
r--;
com++;
}
b[l]=b[r];
mov++;
while ((b[l]<=key)&&(l<r))
#define N 20
int a[N],b[N];
int num,i,j,com,mov;
void quicksort(int s,int w);
void main()
{
srand((unsigned)time(0));
for (i=0;i<N;i++)
{
num=rand()%100;
a[i]=num;
指导教师评语及成绩:
成绩:指导教师签名:
批阅");
system("pause");
printf("\n\n");
com=0;mov=0;
quicksort(0,N-1);
printf("快速排序完成\n");
for (i=0;i<N;i++)
printf("%d ",b[i]);
printf("\n比较%d次,移动%d次。\n\n",com,mov);
【实验环境】(使用的软硬件)
硬件: PC
软件: VC++ 6.0
实验内容:
【实验过程】(实验步骤、记录、数据、分析)
(一)实验步骤
1)随机产生20位整数
1.2)输入序列,编写程序,按下列排序方法将序列从小到大排序并输出。
2.冒泡排序
3.快速排序
3)纪录每种方法比较次数和移动次数
(二)程序清单
#include<stdio.h>
相关文档
最新文档