算法时间复杂度

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

算法时间复杂度 The final edition was revised on December 14th, 2020.

实验一算法的时间复杂度

一、实验目的与要求

熟悉C/C++语言的集成开发环境;

通过本实验加深对算法分析基础知识的理解。

二、实验内容:

掌握算法分析的基本方法,并结合具体的问题深入认识算法的时间复杂度分析。三、实验题

定义一个足够大的整型数组,并分别用起泡排序、简单选择排序、快速排序和归并排序对数组中的数据进行排序(按从小到大的顺序排序),记录每种算法的实际耗时,并结合数据结构中的知识对算法的时间复杂度分析进行说明。实验数据分两种情况:

1、数组中的数据随机生成;

2、数组中的数据已经是非递减有序。

四、实验步骤

理解算法思想和问题要求;

编程实现题目要求;

上机输入和调试自己所编的程序;

验证分析实验结果;

整理出实验报告。

五、实验程序

#include

#include<>

#include<>

using namespace std;

void SelectSort(int r[ ], int n)

{

int i;

int j;

int index;

int temp;

for (i=0; i

{

index=i;

for (j=i+1; j

if (r[j]

index=j;

if (index!=i)

{

temp=r[i];

r[i]=r[index];

r[index]=temp;

}

}

for(i=0;i

cout<

cout<<"\n";

}

void BubbleSort(int r[], int n)

{

int temp;

int exchange;

int bound;

exchange=n-1;

while (exchange)

{

bound=exchange;

exchange=0;

for (int j=0; j

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

{

temp=r[j];

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

r[j+1]=temp;

exchange=j;

}

}

for(int i=0;i

cout<

cout<<"\n";

}

int Partition(int r[], int first, int end) {

int i=first;

int j=end;

int temp;

while (i

{

while (i

j--; if (i

{

temp=r[i];

r[i]=r[j];

r[j]=temp;

i++;

}

while (i

i++;

if (i

{

temp=r[j];

r[j]=r[i];

r[i]=temp;

j--;

}

}

return i;

}

//快速排序

void QuickSort(int r[], int first, int end)

{

if (first

{

int pivot=Partition(r, first, end);

QuickSort(r, first, pivot-1);

QuickSort(r, pivot+1, end);

}

}

void Merge(int r[], int r1[], int s, int m, int t) {

int i=s;

int j=m+1;

int k=s;

while (i<=m && j<=t)

{

if (r[i]<=r[j])

r1[k++]=r[i++];

else

r1[k++]=r[j++];

}

if (i<=m)

while (i<=m)

r1[k++]=r[i++];

else

while (j<=t)

r1[k++]=r[j++];

}

void MergePass(int r[ ], int r1[ ], int n, int h) {

int i=0;

int k;

while (i<=n-2*h)

{

Merge(r, r1, i, i+h-1, i+2*h-1);

i+=2*h;

}

if (i

Merge(r, r1, i, i+h-1, n);

else for (k=i; k<=n; k++)

r1[k]=r[k];

}

void MergeSort2(int r[], int r1[], int r2[],int s, int t) {

int m;

if (s==t)

{

r1[s]=r[s];

}

else

{

m=(s+t)/2;

MergeSort2(r, r2, r1, s, m);

MergeSort2(r, r2, r1, m+1, t);

Merge(r2, r1, s, m, t);

}

}

int main()

{

int b[100];

const int numv=100;

clock_t t=clock();

for(int k=0;k<100;k++)

b[k]=rand()%100;

cout<

cout << "\n起泡排序结果为:" << "\n";

BubbleSort(b, numv);

cout<

cout<<"\n 简单选择排序结果为:"<<"\n";

SelectSort(b, numv);

cout<

cout<<"\n 快速排序结果为:"<<"\n";

QuickSort(b,0,100);

for(int j=0;j<100;j++)

cout<

cout<<"\n";

cout<

const int h=100;

相关文档
最新文档