您的位置:首页 > 其它

第三周作业——冒泡排序和归并排序

2014-04-17 19:51 417 查看
#include<iostream>

#include<fstream>

#include<string>

#include<ctime>

using namespace std;

#include<stdlib.h>

void bubbleSort(long *a,long n)

{

 for(long i=0;i<n-1;i++)

  for(long j=1;j<n;j++)

   if(a[i]>a[j])

   {

    a[i]=a[i]+a[j];

    a[j]=a[i]-a[j];

    a[i]=a[i]-a[j];

   }   

   

}

void merge(long p[],long q[],long r,long s,long t)

{

 long i=r;

 long j=s+1;

 long k=r;

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

 {

  if(p[i]<q[j]) q[k++]=p[i++];

  else q[k++]=p[j++];

 }

 if(i<=s)

  while(i<=s)

   q[k++]=p[i++];

  else while(j<=t)

   q[k++]=p[j++];

}

void mergePass(long p[],long q[],long h,long n)

{

 long i=1;

 while(i<=n-2*h+1)

 {

  merge(p,q,i,i+h-1,i+2*h-1);

  i+=2*h;

 }

 if(i<n-h+1) merge(p,q,i,i+h-1,n);

 else for(int k=i;k<=n;k++) q[k++]=p[k++];

}

void mergeSort(long p[],long q[],long n)

{

 int h=1;

 while(h<n)

 {

  mergePass(p,q,n,h);

  h=2*h;

  mergePass(q,p,n,h);

  h=2*h;

 }

}

int main()

{

 long *a=new long[1000000];//long *b=new long[10];

 if(a==NULL){ cout<<"分配失败"; exit(-1);}

 string str;

 clock_t start;

 clock_t end;

 ifstream infile("largeW.txt");

 for(long i=0;i<1000000;i++) 

 {

  getline(infile,str);

  a[i]=atoi(str.c_str());

 }

    infile.close(); 

 start=clock();

 bubbleSort(a,1000000);

 //mergeSort(a,b,10);

 end=clock();

 cout<<endl<<(start-end)/CLOCKS_PER_SEC<<endl;

 ofstream outfile("largeW_bubble.txt ");

 for(long j=0;j<1000000;j++)

  outfile<<a[j]<<endl;

 outfile.close();

 /*ofstream outfile("largeW_merge.txt ");

 for(long j=0;j<10;j++)

  outfile<<a[j]<<endl;

 outfile.close();*/

 delete[] a;

 //delete[] b;

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: