加载中...

排序算法

快速排序

//快速排序算法模板

void quick_sort (int q[],int l,int r)
{
    if(l>=r)return;
    
    int i=l-1,j=r+1,x=q[l];	//x=q[r]
    while(i<j)
    {
        do i++; while(q[i]<x);
        do j--; while(q[j]>x);
        if(i<j)swap(q[i],q[j]);
        else break;
    }
    quick_sort(q,l,j),quick_sort(q,j+1,r);
    //quick_sort(q,l,i-1),quick_sort(q,i,r);
}
注意边界问题!!!
当x取q[l]时,递归不能用左指针i
当x取q[r]时,递归不能用右指针j



归并排序

//归并排序模板

void merge_sort (int q[],int l,int r)
{
    if(l>=r)return;
    
    int mid=(l+r)/2;
    merge_sort(q,l,mid);
    merge_sort(q,mid+1,r);
    
    int k=0,i=l,j=mid+1;
    while(i<=mid&&j<=r)
        if(q[i]<q[j])tmp[k++]=q[i++];
    	else tmp[k++]=q[j++];
    while(i<=mid)tmp[k++]=q[i++];
    while(j<=r)tmp[k++]=q[j++];
    
    for(int i=l,j=0;i<=r;i++,j++)q[i]=tmp[j];
}


posted @ 2023-04-30 00:51  邪童  阅读(4)  评论(0编辑  收藏  举报