首页 > 其他 > 详细

【算法导论实验1】插入排序与归并排序

时间:2014-03-26 16:49:01      阅读:358      评论:0      收藏:0      [点我收藏+]

任务描述:

生成50000个随机数,存于input.txt中,然后通过插入排序和归并排序,分别输出到OutputInsertion.txt和OutputMerge.txt中,并统计运行时间。来体会算法的时间复杂度。

代码如下:

//编译环境:GCC 3.4.5,Ubuntu 12.04 LTS
//2014.3.26

#include <iostream>
#include <fstream>
#include <algorithm>
#include <ctime>
#include <iomanip>
#include <cstring>
using namespace std;

const int MaxArraySize=50002;
const int maxint=0x3f3f3f3f;

int origin[MaxArraySize];
int origin2[MaxArraySize];


void InsertionSort(int n,int a[])
{
	int key,i;
	for(int j=1;j<n;j++)
	{
		key=a[j];
		i=j-1;
		while(i>=0 && a[i]>key)
		{
			a[i+1]=a[i];
			i--;
		}
		a[i+1]=key;
	}
}

void Merge(int A[],int p,int q,int r)
{
	int len_left=q-p+1;
	int len_right=r-q;
	int *L=new int [MaxArraySize];
	int *R=new int [MaxArraySize];

	for(int i=0;i<len_left;i++)
	{
		L[i]=A[p+i];
	}
	for(int j=0;j<len_right;j++)
	{
		R[j]=A[q+j+1];
	}
	L[len_left]=maxint;
	R[len_right]=maxint;

	int i=0,j=0;
	for(int k=p;k<=r;k++)
	{
		if (L[i]<=R[j])
		{
			A[k]=L[i];
			i++;
		}
		else
		{
			A[k]=R[j];
			j++;
		}

	}

}

void MergeSort(int A[],int p,int r)
{
	int q;
	if(p<r)
	{
		q=(p+r)/2;
		MergeSort(A,p,q);
		MergeSort(A,q+1,r);
		Merge(A,p,q,r);
	}
}

int main()
{
	//int a[]={8,1,4,6,5,2};
	//InsertionSort(6,a);

	ifstream cin;
	ofstream cout;
	//生成1000000以内的整数,50000个
	cout.open("input.txt");
	srand((unsigned)time(NULL));
	double cost_time;
	double starttime,endtime;
	for(int i=0;i<=50000;i++)
	{
	    cout<<rand()%(1000000)<<" ";
	}
	cout.close();

    cin.open("input.txt");
    for(int i=0;i<=50000;i++)
    {
        cin>>origin[i];
    }
    memcpy(origin2,origin,sizeof(origin));

    cin.close();

    cout.open("OutputInsection.txt");

    starttime=(double)clock();
    InsertionSort(50000,origin);
    for(int i=0;i<=50000;i++)
    {
        cout<<origin[i]<<" ";
    }
    cout<<endl;
    endtime=(double)clock();
    cost_time=(endtime-starttime);
    //输出小数点后3位,单位为秒
    cout<<setiosflags(ios::fixed)<<setprecision(6)<<"插入排序花费了:"<<cost_time/1000000<<endl;
    cout.close();


    cout.open("OutputMerge.txt");

    starttime=(double)clock();
    MergeSort(origin2,0,50000);
    for(int i=0;i<=50000;i++)
    {
        cout<<origin2[i]<<" ";
    }
    cout<<endl;
    endtime=(double)clock();
    cost_time=(endtime-starttime);
    //输出小数点后3位,单位为秒
    cout<<setiosflags(ios::fixed)<<setprecision(3)<<"归并排序花费了:"<<cost_time/1000000<<endl;

    cout.close();

	return 0;
}


【算法导论实验1】插入排序与归并排序,布布扣,bubuko.com

【算法导论实验1】插入排序与归并排序

原文:http://blog.csdn.net/mig_davidli/article/details/22166289

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!