排序(冒泡,快排,归并)

2020-12-03 08:42

阅读:490

标签:冒泡   sort   iostream   while   ace   开始   swap   col   amp   

一,冒泡排序(n^2)

for(int i=2;i)j在前,i在后
    for(int j=1;j)
            if(a[j]a[i])
               swap(a[i],a[j]);

二:快速排序(n*logn~n^2)

#includeusing namespace std;
int a[(int)1e5+5];
void quick_sort(int q[],int l,int r)//先排序再递归
{
    if(l>=r)return;
    int x=q[l],i=l-1,j=r+1;
    while(ij)
    {
        do i++;while(q[i]x);
        do j--;while(q[j]>x);
        if(ij)
            swap(q[i],q[j]);
    }
    quick_sort(a,l,j);
    quick_sort(a,j+1,r);
}
int main ()
{
     int n;
     cin>>n;
     for(int i=1;i)
        cin>>a[i];
     quick_sort(a,1,n);
     for(int i=1;i)
        cout‘ ;



    return 0;
}

三:归并排序(nlogn)

#includeusing namespace std;

int a[(int)1e5+5],tmp[(int)1e5+5];
void merge_sort(int q[],int l,int r)
{
    if(l>=r)return ;
    int mid=l+r>>1;
    merge_sort(q,l,mid),merge_sort(q,mid+1,r);
    int k=0,i=l,j=mid+1;
    while(ir)
    if(q[i]];
    else tmp[k++]=q[j++];
    while(i];
    while(j];
    for(int i=l,j=0;itmp[j];//容易出错,tmp数组的范围是从0开始,而q是从l到r
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i)
        cin>>a[i];
    merge_sort(a,1,n);
    for(int i=1;i)
        cout‘ ;
    return 0;
}

 

排序(冒泡,快排,归并)

标签:冒泡   sort   iostream   while   ace   开始   swap   col   amp   

原文地址:https://www.cnblogs.com/zwx7616/p/10987588.html


评论


亲,登录后才可以留言!