sort cmp函数的写法 (特判排序 二级排序)

特判排序:

看看以下cmp写法,猜想作用:

该函数作用就是“将正数升序排列, 负数排到最后”

我认为cmp函数的一个特性就是, 如果return false, 那么函数就会将他们互换位置, return true就会保持原来位置不变。(快排的思想没掌握,暂时如此理解)

所以这函数可以解读为:

p1是前面的元素, p2是后面的元素。

①如果p1<0的话,就是p1是负数,return false,直接交换

②p1>0 p2 <0 那么正数已经在负数后面了,return true,不需要动。

③p1>0 && p2 > 0 那么就按升序排列, return p1.sc36 < p2.sc36

假设有10个数:0 8 9 4 -4 4 -2 2 -7 -4。

运行以上代码:

如果需要对负数部分也进行排列,可以加上这一行。

二级排序:

然后再给出一个cmp二级排序的写法

时间: 2024-08-10 02:10:25

sort cmp函数的写法 (特判排序 二级排序)的相关文章

C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法

这个问题屡次碰到解决之后再次遇到又忘记怎么弄了,这次打算彻底搞清楚. ·C 首先对所谓字符数组的排序应该是对(char)*a[]数组而非(char)a[][]进行的排序,后者是无法直接调用qsort实现其排序的. cmp函数写法: 1 int cmp(const void *a, const void *b){ 2 return strcmp(*((char**)a), *((char**)b)); 3 } 很容易想象字符串在初始化时已经被分配了特定的存储空间,我们用其首地址标识该字符串. 对于

PAT甲题题解-1038. Recover the Smallest Number (30)-排序/贪心,自定义cmp函数的强大啊!!!

博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789138.html特别不喜欢那些随便转载别人的原创文章又不给出链接的所以不准偷偷复制博主的博客噢~~ 题意:给出n个数,求拼接后值最小的数是多少. 一开始就简单的把所有字符串先从小到大拍个序,然后拼接起来去掉前导零,结果发现有个问题,比如下面两个32 32321如果按常规字符串比较,32是在32321前面.然而,32321-32才是较小的方案如何有个好的比较

leetcode-179-Largest Number(理解规则,自定义cmp函数进行排序)

题目描述: 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数. 要完成的函数: string largestNumber(vector<int>& nums) 说明: 1.这道题给定一个vector,里面存放着int类型的非负整数,要求把这些非负整数拼起来,尽可能拼成一个最大的整数. 比如[

POJ: 2413 ——优先队列——结构体cmp函数一级排序

我要翻译题目!!! /* A group of cows grabbed a truck and ventured on an  expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to run over a rock and puncture the truck's fuel tank. The truck now leaks one unit of fuel ev

sort+结构体实现二级排序

之前介绍的sort函数由于其效率较高,使用较为简单让我用起来那叫一个爽,今天再写一篇使用sort+结构体实现二级排序的方法. 还是先想个问题吧,比如我想输入5个同学的名字和身高,然后得到他们身高的降序,但是如果出现相同身高的情况,名字的拼音靠前的排在前面. 好,现在这个问题已经涉及到了二级排序,要按照身高的降序和姓名的升序排列,那么就要先定义一个结构体,将姓名和身高都包含进去,然后用sort对结构体排序,而实现二级排序,关键在于自己写的cmp函数(sort的比较方法) 1 #include<io

python中sorted函数的理解(对list列表排序,对dict字典排序)

在python手册中: sorted(iterable[,cmp,[,key[,reverse=True]]]) 作用:Return a new sorted list from the items in iterable. 第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list). 可选的参数有三个,cmp.key和reverse. 1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个

教教大家一些strcpy,strcmp,strcat,strlen函数的写法

VC源码: strcmp函数的写法: #include<stdio.h> #include<string.h> int strcmp1(char* a, char* b) { for(;*a==*b;a++,b++) if(*a!='\0') return 0; return *a - *b; } main() {  int l; char a[10]={"db"}; char b[10]={"cb"}; l=strcmp1(a,b); pr

jQuery扩展插件和拓展函数的写法

<script type="text/JavaScript">            //jQuery插件的写法(需要传入操作对象)        ;(function($)        {            //PI_TestPlugIn为插件名称,也是插件的操作对象            //为了不会与其它插件名重复,这里我使用PlugIn的缩写PI_来定义插件对象前缀            $.fn.PI_TestPlugIn=               { 

C99 中 main 函数的写法

今天在论坛看见有人讨论 C 语言中 Main 函数的写法,看到结论才知道 Main 函数的正确写法. 被老谭酸菜坑了这么多年,还是记录下吧,或许以后某天不搞 .net,回去折腾 C 语言了. 写法1: 1 int main(void) 2 { 3 // TODO 4 return 0; 5 } 写法2: 1 int main(int argc, char *argv[]) 2 { 3 // TODO 4 return 0; 5 } 两种写法都是符合 C99 标准的,当然第二种是适用范围更广泛.