C++ sort 排序(降序、升序)使用总结

https://blog.csdn.net/zhangpiu/article/details/50564064

一、升序

    C++ sort 函数十分方便,可以对内置类型也可对自定义类型进行快速排序,内置类型的使用比较简单,下面主要讨论自定义类型的排序,一般有如下几种使用方法:
1.1 重载比较操作符

    比如,我们现有一批学生,要根据他们的成绩进行升序排序,成绩如果相等则根据名字升序排序,那么我们可以如下操作:
 

struct Student{
    string name;
    int grade;
 
    Student(string name, int grade) : name(name), grade(grade){}
 
    bool operator < (const Student& rhs) const{
        return grade < rhs.grade
        || (grade == rhs.grade && name < rhs.name);
    }
 
    friend void operator << (ostream& output, const Student& s){
        output << s.name << " " << s.grade << endl;
    }
};
int main()
{
    vector<Student> vec;
 
    vec.emplace_back("Jack", 20);
    vec.emplace_back("John", 30);
    vec.emplace_back("Amy", 20);
    vec.emplace_back("Bill", 90);
 
    cout << "Before:" << endl;
    for(auto& s : vec){
        cout << s;
    }
 
    sort(begin(vec),end(vec));
 
    cout << endl << "After:" << endl;
    for(auto& s : vec){
        cout << s;
    }
 
    return 0;
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言中的sort()函数可以通过调整比较函数的返回值来实现升序降序排序。比较函数是sort()函数的一个参数,它用来判断两个元素的大小关系。 在升序排序中,比较函数应返回一个负数、0或正数来表示第一个元素小于、等于或大于第二个元素。如果我们想要在相等的情况下降序排序,我们可以在比较函数中调换两个元素的位置。这样,在相等的情况下返回正数,就会使得相等的元素按降序排列。 下面是一个示例,对一个整型数组进行排序,按升序排序,并在相等的情况下按降序排序。 ```c #include <stdio.h> #include <stdlib.h> int cmp(const void* a, const void* b) { int num1 = *(const int*)a; int num2 = *(const int*)b; if (num1 < num2) return -1; else if (num1 > num2) return 1; else return num2 - num1; // 在相等的情况下返回正数,实现降序排序 } int main() { int nums[] = {5, 2, 8, 6, 1}; int size = sizeof(nums) / sizeof(nums[0]); qsort(nums, size, sizeof(nums[0]), cmp); for (int i = 0; i < size; i++) { printf("%d ", nums[i]); } return 0; } ``` 输出结果为:1 2 5 6 8,即按升序排序。 ### 回答2: 在C语言中,可以使用qsort()函数来实现升序排序和相等时降序排序的功能。 qsort()函数是C标准库中的一个快速排序函数,可以对任意类型的数组进行排序。它的原型定义如下: ```c void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); ``` 其中,参数解释如下: - base:指向要排序的数组的第一个元素的指针。 - nmemb:数组中的元素个数。 - size:每个元素的大小(以字节为单位)。 - compar:比较函数的指针,用于确定元素之间的顺序。 比较函数的原型定义如下: ```c int compar(const void *a, const void *b); ``` 在比较函数中,如果返回值小于0,则认为a<b;如果返回值大于0,则认为a>b;如果返回值等于0,则认为a=b。 要实现升序排序和相等时降序排序的功能,只需在比较函数中做一些特殊的判断即可。 下面是一个示例代码,展示如何使用qsort()函数实现这种排序功能: ```c #include <stdio.h> #include <stdlib.h> int compar(const void *a, const void *b) { int x = *(int *)a; int y = *(int *)b; if (x < y) { return -1; // 升序 } else if (x > y) { return 1; // 升序 } else { return y - x; // 相等时降序 } } int main() { int arr[] = {5, 2, 8, 2, 1}; qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), compar); for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%d ", arr[i]); } return 0; } ``` 以上代码中,比较函数先判断两个元素的大小关系,如果不相等则按升序排序;如果相等,则按照降序排序。 运行结果如下: ``` 1 2 2 5 8 ``` 这样就实现了在C语言中使用qsort()函数进行升序排序,相等时降序排序的功能。 ### 回答3: c sort是C语言中提供的一个排序函数,用于对数组进行排序。默认情况下,c sort函数会按照升序的方式对数组元素进行排序。 但是如果数组中存在相等的元素,c sort函数的默认行为是保持它们的相对顺序。也就是说,相等的元素在排序后的数组中仍然会保持原来的相对位置。 如果需要在相等元素之间按照降序排序,可以通过自定义比较函数来实现。比较函数可以作为参数传递给c sort函数,用于确定元素之间的比较规则。 比较函数需要满足以下条件: 1. 如果a小于b,则返回负值; 2. 如果a等于b,则返回0; 3. 如果a大于b,则返回正值。 当c sort函数需要比较两个元素时,会调用比较函数来确定它们之间的大小关系。根据比较函数的返回值,c sort函数会按照不同的顺序将元素进行排序。 所以,如果想要使c sort函数在排序过程中,相等的元素按照降序排序,只需要编写一个合适的比较函数,并将其作为参数传递给c sort函数即可。比较函数可以根据需要对相等元素的顺序进行调整,以实现相等降序排序效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值