STL中的sort()与qsort()

sort的返回值问题,参考http://lonemover.blog.sohu.com/132651187.html
cmp返回true的时候不交换,返回false的时候交换两元素。
稳定排序可以用stable_sort();

#include
#include
#include
#include
#include
#define MAX 3009 
using namespace std;

sort();
 
sort 函数需包含在#include 中; 
适用于基本类型: sort(begin,end),表示一个范围,默认升序
主要用于自定义类型 : sort(begin,end,compare) 可实现自定义的排序,自己编写compare函数,
要求返回类型为bool型。 

struct D{//自定义类型 
    char sorted;
    bool operator <(const D tmp) const{
        return (this->sorted)<(tmp.sorted);    
    } 
    //1:函数体内,是自己写的代码,返回值为bool型即可。自定义类型没有+、-、*、/、>、<
    //等运算,但是可以通过重载使之像基本类型(int、char)等一样,具有这些运算。
    //2:sort();函数对不是基本类型的变量进行排序时,可用以下形式sort(s,s+4,cmp)(其中cmp自己写);
    //也可以重载(operator <)后直接这么用sort(s,s+4);此时的sort();函数只会去找重载的 < 而不会去找其他的重载运算符; 
    
}s[100];

bool compare(struct D a,struct D b){
    return a.sorted
/**
bool cmp(struct Node a, struct Node b){
    if(a.time==b.time) return a.level > b.level;
    return a.time > b.time;
}
**/
int main(){
    int i=0;
    for(i=0;i<4;i++){
        scanf("%s",s[i].sorted);
    }
    重载:sort(s,s+4); 
    自己编写compare函数:sort(s,s+4,compare);
    for(i=0;i<4;i++){
        printf("%s\n",s[i].sorted);
    }
    scanf("%d",&i);
return 0;
}
#include
#include
#include
#include
#include
#define MAX 3009 
using namespace std;

qsort()
原型:
_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*));
解释: qsort ( 起始地址,元素个数,元素大小,比较函数) 
比较函数是一个自己写的函数 
遵循 int com(const void *a,const void *b) 的格式。
当 a b 关系为 > < = 时,分别返回正值 负值 零 (或者相反)。
使用 a b 时要强制转换类型,从 void * 转换回应有的类型后,进行操作。 
数组下标从零开始,个数为 N, 下标 0-(n-1)。
int compare(const void *a,const void *b){
	return *(int*)b-*(int*)a; 
}


struct D{//自定义类型 
    char sorted;
}s[100];

int compare(const void *a,const void *b){
    return (*(struct D *)a).sorted-(*(struct D *)b).sorted;
}

int compare(const void *a,const void *b){
    return ((struct D *)a)->sorted-((struct D *)b)->sorted;
}


你可能感兴趣的:(数据结构)