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