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

Posted zwx7616

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序(冒泡,快排,归并)相关的知识,希望对你有一定的参考价值。

一,冒泡排序(n^2)

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

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

#include<iostream>

using 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(i<j)
    
        do i++;while(q[i]<x);
        do j--;while(q[j]>x);
        if(i<j)
            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<=n;i++)
        cin>>a[i];
     quick_sort(a,1,n);
     for(int i=1;i<=n;i++)
        cout<<a[i]<< ;



    return 0;

三:归并排序(nlogn)

#include<iostream>

using 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(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;j++,i++)q[i]=tmp[j];//容易出错,tmp数组的范围是从0开始,而q是从l到r

int main()

    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    merge_sort(a,1,n);
    for(int i=1;i<=n;i++)
        cout<<a[i]<< ;
    return 0;

 

以上是关于排序(冒泡,快排,归并)的主要内容,如果未能解决你的问题,请参考以下文章

八大排序算法C语言过程图解+代码实现(插入,希尔,选择,堆排,冒泡,快排,归并,计数)

排序-冒泡,归并,快排区别

插入.希尔.选择.堆排.冒泡.快排.归并.计数_8排序

排序---内部排序算法(快排希尔排序归并排序基数排序冒泡选择排序)比较

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

排序(冒泡选择插入希尔归并快排)