c语言排序耗时比较,c语言各种排序方法与所耗时间比较程序.doc

#include

#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){co


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部