算法设计实验报告一
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
..
..
..
..
.
..
.
{ int i,j,k; int x; for (i=1;i<=length-1;++i) { k=i; for(j=i+1;j<=length;++j) if(r[j]<r[k]) k=j; if( k!=i) { x= r[i]; r[i]=r[k]; r[k]=x; } }
void BubbleSort(int r[],int length) {
int i,j,temp; for(j=length;j>0;j--)
for(i=0;i<j-1;i++) if(r[i]>r[i+1]) { temp=r[i]; r[i]=r[i+1]; r[i+1]=temp; }
}
//冒泡排序
三、基本思想、原理和算法描述:
本次实验要求写出四种算法,来比较它们运行的时间。 冒泡排序: 总的时间复杂度为O(n). 基本思想:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则 将两个记录交换,然后比较第二个记录和第三个记录的关键字。依此类推,直到第n-1 和第n个的关键字进行比较为止。 算法描述: void BubbleSort(int r[],int length) //冒泡排序 {
}
插入排序:总的时间复杂度为:O( )
算法描述: void InsertSort(int r[],int length) {
int i,j; for (i=0;i<=length;i++) {
r[0]=r[i]; j=i-1; while(r[0]<r[j]) {
r[j+1]=r[j]; j=j-1; } r[j+1]=r[0]; } }
.
..
.
《计算机算法设计与分析》实 验 报 告
实验名称:排序算法效率比较
实验地点:
所使用的开发工具及环境:
一、实验目的:
比较至少 4 种排序算法的执行效率。已学过的算法:起泡排序、选择排序、插入排序、 shell 排序,归并排序、快速排序等。
二、实验容:
1、从中选择至少 4 中排序算法,写成独立的函数进行调用。 2、参与排序的数据不少于 10000 个,要求用数据文件存储随机产生的数据。 3、要求在 main()函数中调用以上函数,并输出各排序算法所用时间。
//插入排序
快速排序:总的时间复杂度为 O(
)
基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另
一部分的关键字小,则可分别对这两部分的记录继续进行排序,直到整个序列有序。
算法描述:
void QuickSort(int A[],int low,int r)
//快速排序
{
..
..
..
..
.
..
.
if(low<r) { int high = Partition(A,low,r); QuickSort(A,low,high-1); QuickSort(A,high+1,r); }
}
四、源程序清单:
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #define MAX 10000
void main() {
long iStart,iStop,runtime; int num[MAX], a[MAX]; int i,j; iStart=GetTickCount(); srand((unsigned)time(NULL)); for(i=0;i<MAX;i++)
num[i]=rand(); iStop=GetTickCount(); runtime=iStop-iStart; printf("生成%d个随机数用了%ldms\n",MAX, runtime); printf("-----------------------------------------\n"); for(i=0;i<MAX;i++)
//简单选择排序
..
..
..
..
.
..
.
} }
r[k]=x; }
void InsertSort(int r[],int length) {
int i,j; for (i=0;i<=length;i++) {
r[0]=r[i]; j=i-1; while(r[0]<r[j]) {
r[j+1]=r[j]; j=j-1; } r[j+1]=r[0]; }
int i,j,temp; for(j=length;j>0;j--)
for(i=0;i<j-1;i++) if(r[i]>r[i+1]) { temp=r[i]; r[i]=r[i+1]; r[i+1]=temp; }
}
简单选择排序:总的时间复杂度为O( )
基本思想:通过n-i次关键字的比较,从n-i+1个记录中选取出关键字最小的记录并和第i 个记录交换。 算法描述: void SelectSort(int r[],int length) //简单选择排序
//插入排序
}
int Partition(int A[],int low,int high) {
int i,j,x,t; x = A[high]; i = low-1; for (j = low;j<=high;j++)
if(A[j] < x) { i++; t = A[j]; A[j] = A[i]; A[i] = t; }
A[high] = A[i+1]; A[i+1] = x; return i+1; }
void QuickSort(int A[],int low,int r) {
if(low<r) {
//快速排序
ຫໍສະໝຸດ Baidu
..
..
..
..
.
..
.
int high = Partition(A,low,r); QuickSort(A,low,high-1); QuickSort(A,high+1,r); } }
void SelectSort(int r[],int length) {
int i,j,k; int x; for (i=1;i<=length-1;++i) {
k=i; for(j=i+1;j<=length;++j)
if(r[j]<r[k]) k=j;
if( k!=i) {
x= r[i]; r[i]=r[k];