快速排序与归并排序的模板

快速排序与归并排序是两种常见的基础排序算法,时间复杂度为logn。

 

快速排序

 

算法思想:1.找到哨兵数,我喜欢用中间的数a[l+r>>1]

                  2.是用双指针i和j,分别从队首和队尾遍历,如果a[i]>mid则i指针停止,如果a[j]<mid则j指针停止,然后交换a[i]和a[j]

                  3.分别快速排序前一段与后一段

 

算法模板:

void quick_sort(int a[],int l,int r)
{
    if(l>=r) return;
    int mid=a[l+r>>1];
    int i=l-1,j=r+1;
    while(j>i)
    {
        do i++;while(a[i]<mid);
        do j--;while(a[j]>mid);
        if(j>i) swap(a[i],a[j]);
    }
    quick_sort(a,l,j),quick_sort(a,j+1,r);
    
}
View Code

 

 

归并排序

 

算法思想:1.递归处理

                  2.将两段数组合并

 

算法模板:

void merge_sort(int a[],int l,int r)
{
    if(l>=r) return;
    int mid=l+r>>1;
    merge_sort(a,l,mid),merge_sort(a,mid+1,r);
    int k=0,i=l,j=mid+1;
    while(i<=mid&&j<=r)
    {
        if(a[i]<=a[j]) temp[k++]=a[i++];
        else temp[k++]=a[j++];
    }
    while(i<=mid) temp[k++]=a[i++];
    while(j<=r) temp[k++]=a[j++];
    for(int i=l,j=0;i<=r;i++,j++) a[i]=temp[j];
}
View Code

 

posted @ 2022-02-16 22:34  王小美O(∩_∩)O  阅读(33)  评论(0)    收藏  举报