文档库 最新最全的文档下载
当前位置:文档库 › c语言各种排序方法及其所耗时间比较程序

c语言各种排序方法及其所耗时间比较程序

c语言各种排序方法及其所耗时间比较程序
c语言各种排序方法及其所耗时间比较程序

c语言各种排序方法及其所耗时间比较程序

The latest revision on November 22, 2020

#i n c l u d e

#include

#include

#include

#include

const int N=1000;//数据量,用于检测算法质量

const int M=1000;//执行次数

//冒泡排序(递增)

void Bubblesort(int r[],int n)

{

int flag=1;//flag为0停止排序

for(int i=1;i

{

flag=0;

for(int j=n-1;j>=i;j--)

if(r[j]

{

int t=r[j];

r[j]=r[j-1];

r[j-1]=t;

flag=1;

}

if(flag==0)

return;

}

}

//快速排序

void quicksort(int r[],int left,int right)

{

int i,j;

int swap;

i=left;j=right;

swap=r[left];

while(i

{

while((i

if(i

{

r[i]=r[j];

i++;

}

while((ir[i]))i++;

if(i

{

r[j]=r[i];

j--;

}

}

r[i]=swap;

if(i>left)

quicksort(r,left,i-1);

if(i

quicksort(r,i+1,right);

return;

}

//堆排序先建立堆

void creatheap(int r[],int i,int n)

{

int j;

int t;

t=r[i];j=2*i;

while(j

{

if((j

if(t

{

r[i]=r[j];

i=j;j=2*i;

}

else j=n;

r[i]=t;

}

}

//堆排序

void heapsort(int r[],int n)

{

int t;

for(int i=n/2;i>=0;i--)

creatheap(r,i,n);

for(i= n-1;i>=0;i--)

{

t=r[0];

r[0]=r[i];

r[i]=t;

creatheap(r,0,i-1);

return;

}

//二路归并

void merge(int r[],int r1[],int low,int mid,int high)//进行二合一的函数{

int i=low,j=mid+1,k=low;

while((i<=mid)&&(j<=high))

{

if(r[i]<=r[j])

r1[k++]=r[i++];

else

r1[k++]=r[j++];

}

while(i<=mid)

r1[k++]=r[i++];

while(j<=high)

r1[k++]=r[j++];

}

void mergepass(int r[],int r1[],int length)//用来区分填入merge函数的变量计算式

{

int i=0,j;

while(i+2*length<=N)

{

merge(r,r1,i,i+length-1,i+2*length-1);

i=i+2*length;

}

if(i+length-1

merge(r,r1,i,i+length-1,N-1);

else

for(j=i;j

r1[j]=r[j];

}

void mergesort(int r[])//二路并归总算法

{

int length=1;

int r1[N+1];

while(length

{

mergepass(r,r1,length);

length=2*length;

mergepass(r1,r,length);

length=2*length;

return;

}

//进行输出

void print(int r[],int n)

{

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

{

if(i%10==0){cout<

cout<

}

cout<

}

//主函数

void main()

{

int i,j,k;

int r[N],a[N];

clock_t start, finish;

double duration;

cout<<"请选择排序方式,1、冒泡法;2、快速排序法;3、堆排序法;4、二路并归法"<

cin>>j;

srand((unsigned)time(NULL));

for(i=0;i

{

a[i]=rand()%10000;

}

switch(j)

{

case(1):

{

cout<<"冒泡法";

start = clock();

for(i=0;i

{

k=N-1;

while(k+1)

{

r[k]=a[k];

k--;

}

Bubblesort(r,N);//冒泡法

}

finish = clock();

duration = (double)(finish - start)/1000; print(r,N);

printf( "%f seconds\n", duration );

}break;

case(2):

{

cout<<"快速排序法";

start = clock();

for(i=0;i

{

k=N-1;

while(k+1)

{

r[k]=a[k];

k--;

}

quicksort(r,0,N-1);//快速排序法

}

finish = clock();

duration = (double)(finish - start)/1000; print(r,N);

printf( "%f seconds\n", duration );

}break;

case(3):

{

cout<<"堆排序法";

start = clock();

for(i=0;i

{

k=N-1;

while(k+1)

{

r[k]=a[k];

k--;

}

heapsort(r,N);//堆排序法

}

finish = clock();

duration = (double)(finish - start)/1000; print(r,N);

printf( "%f seconds\n", duration );

}break;

case(4):

{

cout<<"二路并归法";

start = clock();

for(i=0;i

{

k=N-1;

while(k+1)

{

r[k]=a[k];

k--;

}

mergesort(r);//二路并归法

}

finish = clock();

duration = (double)(finish - start)/1000;

print(r,N);

printf( "%f seconds\n", duration );

}break;

}

}

相关文档