Bubblet1 Use time:23951ms
Bubblet2 Use time:17710ms
HeapSort Use time:15ms
QuickSort Use time:7ms
请按任意键继续. . .
新的一轮测试结果。加入了快排。
C99正式支持在任意位置定义变量。如果你没有C99编译器,请用C++编译器代替。
我的所有代码,请都不要用TC编译……
附上源码:
/********************************************************
** Highlight software by yzfy(雨中飞燕) http:// *
*********************************************************/
#include <iostream>
#include <time.h>
using namespace std;
void Bubblet1(int *a,int len)
{
int i=1,j;
while (len--,i)
{
for (j=i=0;j<len;j++)
if (a[j]>a[j+1])
{int t=a[j];a[j]=a[j+1];a[j+1]=t;i=1;}
}
}
void Bubblet2(int *a,int len)
{
for (int i=1,j=len-1,k=1;k;i++)
{
int l;k=0;
for (l=i-1;l<j;l++)
if (a[l]>a[l+1])
{int t=a[l];a[l]=a[l+1];a[l+1]=t;k=1;}
if (!k)break;
for (l=--j;l>=i;l--)
if (a[l-1]>a[l])
{int t=a[l];a[l]=a[l-1];a[l-1]=t;k=1;}
}
}
void AdjustHeap(int *a,int begin,int len)
{
int child,x=a[begin];
while (child=begin<<1|1,child<len)
{
if (child!=len-1 && a[child]<a[child+1])child++;
if (x<a[child]){a[begin]=a[child];begin=child;}
else break;
}
a[begin]=x;
}
void HeapSort(int *a,int len)
{
for (int i=len/2-1;i>=0;i--)
AdjustHeap(a,i,len);
while (len-->1)
{
int t=a[len];a[len]=a[0];a[0]=t;
AdjustHeap(a,0,len);
}
}
int* Partition(int* begin,int* end)
{
int x=*end;
for (;begin<end;begin++)
if (*begin > x) *end--=*begin;
return *begin=x,begin;
}
void QuickSort(int* begin,int* end)
{
if (begin < end)
{
int *p=Partition(begin,end);
QuickSort(begin,p-1);
QuickSort(p+1,end);
}
}
#define N 100000
int a[N];
int main()
{
clock_t t;
srand((unsigned)time(NULL));
for (int i=0;i<N;i++)a[i]=rand();
t=clock();
Bubblet1(a,N);
printf("Bubblet1 Use time:%ldms\n",clock()-t);
for (int i=0;i<N;i++)a[i]=rand();
t=clock();
Bubblet2(a,N);
printf("Bubblet2 Use time:%ldms\n",clock()-t);
for (int i=0;i<N;i++)a[i]=rand();
t=clock();
HeapSort(a,N);
printf("HeapSort Use time:%ldms\n",clock()-t);
for (int i=0;i<N;i++)a[i]=rand();
t=clock();
QuickSort(a,a+N-1);
printf("QuickSort Use time:%ldms\n",clock()-t);
}