码迷,mamicode.com
首页 > 其他好文 > 详细

sort与qsort

时间:2015-08-13 14:23:16      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

一、sort

 1.int

技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int main(){
    int a[]={5,4,3,2,1,0,9,8,7,6},i;
    sort(a,a+10);//默认升序
    for(i=0;i<10;++i)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
View Code
技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

bool cmp(int a,int b){
    return a>b;//降序
}

int main(){
    int a[]={5,4,3,2,1,0,9,8,7,6},i;
    sort(a,a+10,cmp);//
    for(i=0;i<10;++i)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
View Code

 2.char

技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int main(){
    char a[]={5,4,3,2,1,0,9,8,7,6};
    int i;
    sort(a,a+10);//默认升序
    for(i=0;i<10;++i)
        printf("%c ",a[i]);
    printf("\n");
    return 0;
}
View Code
技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

bool cmp(char a,char b){
    return a>b;//降序
}

int main(){
    char a[]={5,4,3,2,1,0,9,8,7,6};
    int i;
    sort(a,a+10,cmp);//
    for(i=0;i<10;++i)
        printf("%c ",a[i]);
    printf("\n");
    return 0;
}
View Code

3.double

技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int main(){
    double a[]={5,4,3,2,1,0,9,8,7,6};
    int i;
    sort(a,a+10);//默认升序
    for(i=0;i<10;++i)
        printf("%.2f ",a[i]);
    printf("\n");
    return 0;
}
View Code
技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

bool cmp(double a,double b){
    return a>b;//降序(估计也有精度问题,需注意。)
}

int main(){
    double a[]={5,4,3,2,1,0,9,8,7,6};
    int i;
    sort(a,a+10,cmp);//
    for(i=0;i<10;++i)
        printf("%.2f ",a[i]);
    printf("\n");
    return 0;
}
View Code

4.结构体

技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

struct node{
    int a;
    int b;
}a[10];

bool cmp(node a,node b){
    if(a.a!=b.a)return a.a<b.a;//a升
    return a.b>b.b;//b降
}

int main(){
    a[0].a=a[1].a=a[2].a=5;
    a[0].b=3;a[1].b=2;a[2].b=1;
    a[3].a=a[4].a=a[5].a=0;
    a[3].b=9;a[4].b=8;a[5].b=7;
    int i;
    sort(a,a+6,cmp);//
    for(i=0;i<6;++i)
        printf("%d %d\n",a[i].a,a[i].b);
    return 0;
}
View Code

5.字符串

 错误代码1:

技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int main(){
    char a[4][20]={"cccc","bbbb","bbcccc","aaaaaaa"};
    int i;
    sort(a,a+4);//默认升序
    for(i=0;i<4;++i)
        printf("%s\n",a[i]);
    return 0;
}
View Code

错误代码2:

技术分享
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;

bool cmp(char a[],char b[]){
    strcmp(a,b)>0?true:false;//降序
}

int main(){
    char a[4][20]={"cccc","bbbb","bbcccc","aaaaaaa"};
    int i;
    sort(a,a+4,cmp);//
    for(i=0;i<4;++i)
        printf("%s\n",a[i]);
    return 0;
}
View Code

 

二、qsort

头文件:stdlib.h

1.int

技术分享
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;//升序
}

int main(){
    int a[]={5,4,3,2,1,0,9,8,7,6},i;
    qsort(a,10,sizeof(int),cmp);
    for(i=0;i<10;++i)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
View Code
技术分享
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

int cmp(const void *a,const void *b){
    //return *(int *)a-*(int *)b;//升序
    //与下面等价
    int *A=(int *)a;//强制转化
    int *B=(int *)b;
    return *A-*B;
}

int main(){
    int a[]={5,4,3,2,1,0,9,8,7,6},i;
    qsort(a,10,sizeof(int),cmp);
    for(i=0;i<10;++i)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}
View Code

2.char

技术分享
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

int cmp(const void *a,const void *b){
    return *(char *)a-*(char *)b;//升序
}

int main(){
    char a[]={5,4,3,2,1,0,9,8,7,6};
    int i;
    qsort(a,10,sizeof(char),cmp);
    for(i=0;i<10;++i)
        printf("%c ",a[i]);
    printf("\n");
    return 0;
}
View Code

 3.double

技术分享
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

int cmp(const void *a,const void *b){
    return *(double *)a>*(double *)b?1:-1;//升序
}

int main(){
    double a[]={5,4,3,2,1,0,9,8,7,6};
    int i;
    qsort(a,10,sizeof(double),cmp);
    for(i=0;i<10;++i)
        printf("%.2f ",a[i]);
    printf("\n");
    return 0;
}
View Code

4.结构体

技术分享
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

struct node{
    int a;
    int b;
}a[10];

int cmp(const void *a,const void *b){
    node *A=(node *)a;
    node *B=(node *)b;
    if(A->a!=B->a)return A->a-B->a;//a升
    return B->b-A->b;//b降
}

int main(){
    a[0].a=a[1].a=a[2].a=5;
    a[0].b=3;a[1].b=2;a[2].b=1;
    a[3].a=a[4].a=a[5].a=0;
    a[3].b=9;a[4].b=8;a[5].b=7;
    int i;
    qsort(a,6,sizeof(node),cmp);
    for(i=0;i<6;++i)
        printf("%d %d\n",a[i].a,a[i].b);
    return 0;
}
View Code

5.字符串

技术分享
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;

int cmp(const void *a,const void *b){
    return strcmp((char *)a,(char *)b);//升序
}

int main(){
    char a[4][20]={"cccc","bbbb","bbcccc","aaaaaaa"};
    int i;
    qsort(a,4,sizeof(a[0]),cmp);
    for(i=0;i<4;++i)
        printf("%s\n",a[i]);
    return 0;
}
View Code

 

sort与qsort

标签:

原文地址:http://www.cnblogs.com/bofengyu/p/4727046.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!