标签:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define SIZE 30000
typedef int Elemtype;
typedef struct
{
Elemtype key;
}SQ;
void Shellsort(Elemtype a[],int n,int d[],int number)
{
int i,j,k,m,span;
SQ temp;
for(m=0;m<number;m++) /*总共要进行number轮排序*/
{
span=d[m];
for(k=0;k<span;k++) /*每一轮排序中,全部元素被分为span 个小组*/
{
for(i=k; i+span<n;i+=span)
{
temp.key=a[i+span];
j=i;
while(j>-1&&temp.key<a[j])
{
a[j+span]=a[j];
j-=span;
}
a[j+span]=temp.key;
}
}
}
}
void Insertsort(Elemtype a[],int n)
{
int i,j;
SQ temp;
for(i=0;i<n-1;i++)
{
temp.key=a[i+1];
j=i;
while(j>-1&&temp.key<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp.key;
}
}
void Quicksort(Elemtype a[],int low,int high) /*low,high分别标记待排序元素的起始位置和终止位置*/
{
int i,j;
SQ temp;
i=low,j=high;
temp.key=a[low]; /*以第一个元素为标准元素*/
while(i<j)
{
while(i<j&&temp.key<=a[j]) /*数组右端扫描*/
j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&a[i]<temp.key)
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=temp.key;
if(low<i) Quicksort(a,low,i-1); /*对左端集合进行递归*/
if(i<high) Quicksort(a,j+1,high); /*对右端集合进行递归*/
}
void product(Elemtype a[])
{ int i;
for(i=0;i<30000;i++)
{ a[i]=rand();
printf("%10d",a[i]);
if((i+1)%6==0) printf("\n");
}
}
int main()
{ Elemtype a[SIZE],b[5]={2500,500,100,20,1};
clock_t start,end; /*typedef long clock_t;*/
start=clock();/* srand()设置随机种子,time()函数的返回值是作为srand函数的参数的!*/
product(a);
Quicksort(a,0,SIZE-1);
end=clock();
printf("\n%lf\n",(double)(end-start)/CLOCKS_PER_SEC); /*常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元*/
start=clock();
product(a);
Insertsort(a,10000);
end=clock(); printf("\n%lf\n",(double)(end-start)/CLOCKS_PER_SEC);
start=clock();
product(a);
Shellsort(a,10000,b,5);
end=clock(); printf("\n%lf\n",(double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
标签:
原文地址:http://www.cnblogs.com/it-xiaojun/p/4623255.html