快速排序与归并排序的比较(C语言)

快速排序与归并排序的比较(C语言)
修改后的测试结果:(可是修改之后随机数排序时间的差距还是很大?请指点)
快速排序与归并排序的比较(C语言)_第1张图片

修改后的程序下载:
/Files/youyu/qSort.rar

修改后的程序代码:
#include  < stdio.h >
#include 
< stdlib.h >
#include 
< time.h >

#define  N 50000  // 定义排序数组的个数
#define  N2 5000

int  partition( int  [], int , int ); // 快速排序分开数组的函数声明
void  qSort( int  [], int , int ); // 快速排序函数声明

void  merge( int  [], int , int , int ); // 归并排序数组合并函数声明
void  mergesort( int  [], int , int ); // 归并排序数组排序函数声明

// 主函数
void  main()
{
    
int i,a[N],a1[N],b[N2],b1[N2];//(已修改)增加了两个用来存储临时数据的数组
    double t1,t2,t3,t4;
        
    
for(i=0;i<N;i++)
    
{
        a[i]
=rand()%N;//使用随机数作为参数
        a1[i]=rand()%N;//(修改)*****************************
    }

    
for(i=0;i<N2;i++)
    
{
        b[i]
=i;//使用已经排好序的一组数作为参数
        b1[i]=i;
    }

    
    
//快速排序N个随机数字所用的时间
    t1=clock();
    qSort(a,
0,N-1);
    t1
=clock()-t1;

    
//归并排序N个随机数字所用的时间
    t2=clock();
    mergesort(a1,
0,N-1);//(修改)*****************************
    t2=clock()-t2;

    
//快速排序N2个已经排序的数字所用的时间
    t3=clock();
    qSort(b,
0,N2-1);
    t3
=clock()-t3;

    
//归并排序N2个已经排序的数字所用的时间
    t4=clock();
    mergesort(b1,
0,N2-1);//(修改)*****************************
    t4=clock()-t4;

    printf(
"\n快速排序%d个随机数字所用时间为:%f毫秒\n",N,(double)t1);
    printf(
"\n归并排序%d个随机数字所用时间为:%f毫秒\n",N,(double)t2);
    printf(
"\n快速排序%d个已经排序数字所用时间为:%f毫秒\n",N2,(double)t3);
    printf(
"\n归并排序%d个已经排序数字所用时间为:%f毫秒\n\n",N2,(double)t4);
}


// 快速排序
// 快速排序分开数组函数的具体实现
int  partition( int  a[], int  low, int  high)
{
    
int pivotkey=a[low];
    
while(low<high)
    
{
        
while(low<high && a[high]>=pivotkey)
        
{
            high
--;
        }

        a[low]
=a[high];
        
while(low<high && a[low]<=pivotkey)
        
{
            low
++;
        }

        a[high]
=a[low];
    }

    a[low]
=pivotkey;
    
return low;
}


// 快速排序函数的具体实现
void  qSort( int  a[], int  left, int  right)
{
    
if(left<right)
    
{
        
int key=partition(a,left,right);
        qSort(a,left,key
-1);
        qSort(a,key
+1,right);
    }

}


// 归并排序
// 归并排序合并数组函数的具体实现
void  merge( int  a[], int  low, int  middle, int  high)
{
    
int h,i,j,k;
    
int b[N];
    h
=low;
    i
=low;
    j
=middle+1;

    
while(h<=middle&&j<=high)
    
{
        
if(a[h]<=a[j])
        
{
            b[i]
=a[h];
            h
++;
        }

        
else
        

            b[i]
=a[j];
            j
++;
        }

        i
++;
    }

    
if(h>middle)
    
for(k=j;k<=high;k++)
    
{
        b[i]
=a[k];
        i
++
    }

    
else
    
{
        
for(k=h;k<=middle;k++)
        

            b[i]
=a[k];
            i
++;
        }

    }

    
for(k=low;k<=high;k++)
    
{
        a[k]
=b[k];
    }

}


// 归并排序函数的具体实现
void  mergesort( int  a[], int  low, int  high)
{
    
int middle;
    
if(low<high)
    
{
        middle
=(low+high)/2;
        mergesort(a,low,middle);
        mergesort(a,middle
+1,high);
        merge(a,low,middle,high);
    }

}

你可能感兴趣的:(快速排序与归并排序的比较(C语言))