#include <iostream>
#include <sys/time.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
int a[10005],b[10005],n;
void select_sort()
{
int i,j,x;
for(i=0;i<n-1;i++)
{
x = i;
for(j=i+1;j<n;j++)
{
if(b[j]<b[x]) x=j;
}
if(x!=i) swap(b[x],b[i]);
}
}
void insert_sort()
{
int i,j;
for(i=1;i<n;i++)
{
int tmp = b[i];
for(j=i;j>0 && tmp<b[j-1];j--)
{
b[j] = b[j-1];
b[j-1] = tmp;
}
}
}
void show()
{
int i;
for(i = 0;i<n;i++) printf("%d ",b[i]);
printf("\n");
}
LL getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
int main()
{
int i,j,k,t;
LL t1,t2;
double tsum;
while(~scanf("%d",&n) && n)
{
printf("数据规模:%d\n20组样本时间(ms):\n",n);
srand(unsigned(time(0)));
for(j=1;j<=20;j++)
{
tsum=0;
for(i = 0;i<n;i++) a[i] = rand()%1000;
for(k=0;k<1000000;k++)
{
for(i = 0;i<n;i++) b[i] = a[i];
t1 = getCurrentTime();
select_sort();
t2 = getCurrentTime();
tsum+=(t2-t1);
}
show();
printf("% lf",tsum/1000000);
if(j%5==0) printf("\n");
}
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sys/time.h>
#include <windows.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,b) memset(a,b,sizeof(a))
const int T = 1;//循环次数
const int G = 20;//样本组数
int a[100005],b[100005],c[100005],n;
void select_sort()//选择排序
{
int i,j,x;
for(i=0;i<n-1;i++)//循环n次
{
x = i;
for(j=i+1;j<n;j++)//找最小的一个数
{
if(b[j]<b[x]) x=j;
}
if(x!=i) swap(b[x],b[i]);//与i交换
}
}
void insert_sort()//插入排序
{
int i,j;
for(i=1;i<n;i++)
{
int tmp = b[i];
for(j=i;j>0 && tmp<b[j-1];j--)//寻找在已排序好的数列中插入的位置
{
//交换
b[j] = b[j-1];
b[j-1] = tmp;
}
}
}
void bubble_sort()//冒泡排序
{
int i,j;
for(i=0;i<n-1;i++)//循环n次
{
for(j=0;j<n-1-i;j++)//将最大的移到最后面
{
if(b[j]>b[j+1]) swap(b[j],b[j+1]);//不断交换
}
}
}
void merge_arr(int lo,int mid,int hi)//合并两个有序数组
{
int len = 0,i=lo,j=mid+1;
while(i<=mid && j<=hi)//将较小的入列
{
if(b[i]<=b[j]) c[len++]=b[i++];
else c[len++] = b[j++];
}
//将剩余的入列,下面两个只会执行一个
while(i<=mid) c[len++] = b[i++];
while(j<=hi) c[len++] = b[j++];
for(i=0;i<len;i++) b[lo+i] = c[i];
}
void merge_sort(int lo,int hi)//归并排序
{
if(lo<hi)//二分排序
{
int mid = (lo+hi)>>1;
merge_sort(lo,mid);
merge_sort(mid+1,hi);
merge_arr(lo,mid,hi);
}
}
void quick_sort(int lo,int hi)//快速排序
{
if(lo<hi)//二分
{
int x=b[lo],i=lo,j=hi;
while(i<j)//填坑法
{
while(i<j && b[j]>=x) j--;//从右往左找到一个比基准大的
if(i<j)
{
b[i] = b[j];
i++;
}
while(i<j && b[i]<x) i++;//从左往右找到一个比基准小的
if(i<j)
{
b[j] = b[i];
j--;
}
}
b[i] = x;
quick_sort(lo,i);
quick_sort(i+1,hi);
}
}
void showa()
{
int i;
for(i = 0;i<n;i++) printf("%d ",a[i]);
printf("\n");
}
void showb()
{
int i;
for(i = 0;i<n;i++) printf("%d ",b[i]);
printf("\n");
}
LL getCurrentTime()//计算算法执行时间
{
/*
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
*/
DWORD start;
start = GetTickCount();
//printf("time %d\n",start);
return start;
}
int main()
{
int i,j,k,t;
LL t1,t2;
double tsum,tsum2,tsum3,tsum4,tsum5,sum=0,sum2=0,sum3=0,sum4=0,sum5=0;
while(~scanf("%d",&n) && n)
{
printf("数据规模:%d\n20组样本时间(ms):\n",n);
printf("选择\t\t插入\t\t归并\t\t冒泡\t\t快速\n");
srand(unsigned(time(0)));
for(j=1;j<=G;j++)//样本组数
{
tsum=tsum2=tsum3=tsum4=tsum5=0;
for(i = 0;i<n;i++) a[i] = rand()%1000000;//随机数组
//show();
for(k=0;k<T;k++)//数据小时循环次数
{
for(i = 0;i<n;i++) b[i] = a[i];
//showb();
t1 = getCurrentTime();
select_sort();
t2 = getCurrentTime();
tsum+=(t2-t1);
//showb();
//printf("\n");
for(i = 0;i<n;i++) b[i] = a[i];
//showb();
t1 = getCurrentTime();
insert_sort();
t2 = getCurrentTime();
tsum2+=(t2-t1);
//showb();
//printf("\n");
for(i = 0;i<n;i++) b[i] = a[i];
//showb();
t1 = getCurrentTime();
merge_sort(0,n-1);
t2 = getCurrentTime();
tsum3+=(t2-t1);
//showb();
//printf("\n");
for(i = 0;i<n;i++) b[i] = a[i];
//showb();
t1 = getCurrentTime();
bubble_sort();
t2 = getCurrentTime();
tsum4+=(t2-t1);
//showb();
//printf("\n");
for(i = 0;i<n;i++) b[i] = a[i];
//showb();
t1 = getCurrentTime();
quick_sort(0,n-1);
t2 = getCurrentTime();
tsum5+=(t2-t1);
//showb();
//printf("\n");
}
//show();
sum+=tsum/T;sum2+=tsum2/T;sum3+=tsum3/T;sum4+=tsum4/T;sum5+=tsum5/T;
printf("%lf\t%lf\t%lf\t%lf\t%lf\n",tsum/T,tsum2/T,tsum3/T,tsum4/T,tsum5/T);
}
printf("平均时间:\n");
printf("%lf\t%lf\t%lf\t%lf\t%lf\n",sum/20,sum2/20,sum3/20,sum4/20,sum5/20);
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sys/time.h>
#include <windows.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,b) memset(a,b,sizeof(a))
const int T = 1;//循环次数
const int G = 20;//样本组数
int a[100005],b[100005],c[100005],n;
void select_sort()
{
int i,j,x;
for(i=0;i<n-1;i++)
{
x = i;
for(j=i+1;j<n;j++)
{
if(b[j]<b[x]) x=j;
}
if(x!=i) swap(b[x],b[i]);
}
}
void insert_sort()
{
int i,j;
for(i=1;i<n;i++)
{
int tmp = b[i];
for(j=i;j>0 && tmp<b[j-1];j--)
{
b[j] = b[j-1];
b[j-1] = tmp;
}
}
}
void bubble_sort()
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(b[j]>b[j+1]) swap(b[j],b[j+1]);
}
}
}
void merge_arr(int lo,int mid,int hi)
{
int len = 0,i=lo,j=mid+1;
while(i<=mid && j<=hi)
{
if(b[i]<=b[j]) c[len++]=b[i++];
else c[len++] = b[j++];
}
while(i<=mid) c[len++] = b[i++];
while(j<=hi) c[len++] = b[j++];
for(i=0;i<len;i++) b[lo+i] = c[i];
}
void merge_sort(int lo,int hi)
{
if(lo<hi)
{
int mid = (lo+hi)>>1;
merge_sort(lo,mid);
merge_sort(mid+1,hi);
merge_arr(lo,mid,hi);
}
}
void quick_sort(int lo,int hi)
{
if(lo<hi)
{
int x=b[lo],i=lo,j=hi;
while(i<j)
{
while(i<j && b[j]>=x) j--;
if(i<j)
{
b[i] = b[j];
i++;
}
while(i<j && b[i]<x) i++;
if(i<j)
{
b[j] = b[i];
j--;
}
}
b[i] = x;
quick_sort(lo,i);
quick_sort(i+1,hi);
}
}
void showa()
{
int i;
for(i = 0;i<n;i++) printf("%d ",a[i]);
printf("\n");
}
void showb()
{
int i;
for(i = 0;i<n;i++) printf("%d ",b[i]);
printf("\n");
}
LL getCurrentTime()
{
/*
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
*/
DWORD start;
start = GetTickCount();
//printf("time %d\n",start);
return start;
}
int main()
{
int i,j,k,t;
LL t1,t2;
double tsum,tsum2,tsum3,tsum4,tsum5,sum=0,sum2=0,sum3=0,sum4=0,sum5=0;
while(~scanf("%d",&n) && n)
{
printf("数据规模:%d\n20组样本时间(ms):\n",n);
printf("插入\n");
srand(unsigned(time(0)));
for(j=1;j<=G;j++)
{
tsum=tsum2=tsum3=tsum4=tsum5=0;
for(i = 0;i<n;i++) a[i] = rand()%1000000;
//show();
for(k=0;k<T;k++)
{
for(i = 0;i<n;i++) b[i] = a[i];
//showb();
t1 = getCurrentTime();
insert_sort();
t2 = getCurrentTime();
tsum+=(t2-t1);
//showb();
//printf("\n");
}
//show();
sum+=tsum/T;
printf("%.2lf\n",tsum/T);
}
printf("平均时间:\n");
printf("%lf\n",sum/20);
}
return 0;
}