排序(sort,冒泡,快排)

来源:互联网 发布:java object 转int 编辑:程序博客网 时间:2024/05/16 10:30

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;}
原创粉丝点击