排序(sort,冒泡,快排)

1.sort();
最简单实用方便的排序。
直接实用即可,但必须有头文件;

#include<algorithm>
using namespace std;

(1)直接对一维数组排序。

int a[100];//你要排序的数组
int n;//数组内元素的个数;
sort(a,a+n);//默认是从小到大排序
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100];
bool cmp(int x,int y)//外部函数,“>”是从大到小排序,“<”是从小到大排序;
{
    return x>y;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d",&a[i]);
    sort(a,a+n,cmp);//这里是从大到小排序;
    for(int i=0; i<n; i++)
        printf("%d ",a[i]);
    return 0;
}

(2)对结构体排序;
依照结构体中的某个元素(或多个元素)排序;

#include<stdio.h>
#include<algorithm>
using namespace std;

struct node
{
    int x,y;
} dis[100];
bool cmp(node a,node b)
{
    if(a.x==b.x)//如 果a,b的x元素相等,那么就以y元素为准;
        return a.y>b.y;
    return a.x>b.x;//否则以x元素为准;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d%d",&dis[i].x,&dis[i].y);
    sort(dis,dis+n,cmp);
    for(int i=0; i<n; i++)
        printf("%d %d\n",dis[i].x,dis[i].y);
    return 0;
}

2.冒泡排序

#include<stdio.h>

int a[1000];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d",&a[i]);
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if(a[j]>a[j+1])//从小到大排序,换为“<”就是从大到小排序
            {
                int f=a[j];
                a[j]=a[j+1];
                a[j+1]=f;
            }
        }
    }
    for(int i=0;i<n;i++)
        printf("%d ",a[i]);
    return 0;
}

3.快速排序

#include<stdio.h>
#include<string.h>

int a[1000];
void kuaisort(int l,int r)//以从小到大排序为例,从大到小类似;
{
    if(l>r)
        return ;
    int temp=a[l];//以在a[l]为基数
    int i=l,j=r;
    while(i!=j)//直到i和j相同
    {
        //找出右边小于a[l](即temp)的数;
        while(temp<=a[j]&&i<j)//一定要先找左边最大的,好好想想
            j--;
        //找出左边大于a[l](即temp)的数;    
        while(temp>=a[i]&&i<j)
            i++;
        if(i<j)//如果找到,进行交换
        {
            int f=a[i];
            a[i]=a[j];
            a[j]=f;
        }
    }
    a[l]=a[i];//将基数(a[l])与最终找到的a[i]交换;
    a[i]=temp;
    //这样【l,i-1】的数都是小于等于temp的数,【i+1,r】的数都是大于等于temp的数
    kuaisort(l,i-1);//将左边进行类似排序
    kuaisort(i+1,r);//将右边进行类似排序
}

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(a,0,sizeof(a));
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]);
        kuaisort(0,n-1);
        for(int i=0; i<n; i++)
            printf("%d ",a[i]);
        printf("\n");
    }
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值