sort函数的用法
做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。
<wbr><wbr><wbr>这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。<br><wbr><wbr><wbr>拿我出的“AC的策略”这题来说,需要对数组t的第0到len-1的元素排序,就写sort(t,t+len);<br><wbr><wbr><wbr>对向量v排序也差不多,sort(v.begin(),v.end());<br><wbr><wbr><wbr>排序的数据类型不局限于整数,只要是定义了小于运算的类型都可以,比如字符串类string。<br><wbr><wbr><wbr>如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp<br>
bool cmp(int a,int b)<br>
{<br><wbr><wbr><wbr>return a>b;<br>
}<br><wbr><wbr>排序的时候就写sort(a,a+100,cmp);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>假设自己定义了一个结构体node<br>
struct node{<br><wbr><wbr><wbr>int a;<br><wbr><wbr><wbr>int b;<br><wbr><wbr><wbr>double c;<br>
}<br><wbr><wbr>有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写这样一个比较函数:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
以下是代码片段:
bool cmp(node x,node y)
{
<wbr><wbr><wbr><wbr>if(x.a!=y.a) return x.a</wbr></wbr></wbr></wbr>
if(x.b!=y.b) return x.b>y.b;
<wbr><wbr><wbr><wbr>return return x.c>y.c;<br>
} <wbr><wbr><wbr><wbr>排序时写sort(arr,a+100,cmp);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
qsort(s[0],n,sizeof(s[0]),cmp);
int cmp(const void *a,const void *b)
{
<wbr><wbr><wbr>return *(int *)a-*(int *)b;<br>
}</wbr></wbr></wbr>
<wbr></wbr>
一、对int类型数组排序 <wbr><wbr></wbr></wbr>
int num[100]; <wbr><wbr></wbr></wbr>
Sample: <wbr><wbr></wbr></wbr>
int cmp ( const void *a , const void *b ) <wbr><wbr><br>
{ <wbr><wbr><br>
return *(int *)a - *(int *)b; <wbr><wbr><br>
} <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
qsort(num,100,sizeof(num[0]),cmp); <wbr><wbr></wbr></wbr>
二、对char类型数组排序(同int类型) <wbr><wbr></wbr></wbr>
char word[100]; <wbr><wbr></wbr></wbr>
Sample: <wbr><wbr></wbr></wbr>
int cmp( const void *a , const void *b ) <wbr><wbr><br>
{ <wbr><wbr><br>
return *(char *)a - *(int *)b; <wbr><wbr><br>
} <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
qsort(word,100,sizeof(word[0]),cmp); <wbr><wbr></wbr></wbr>
三、对double类型数组排序(特别要注意) <wbr><wbr></wbr></wbr>
double in[100]; <wbr><wbr></wbr></wbr>
int cmp( const void *a , const void *b ) <wbr><wbr><br>
{ <wbr><wbr><br>
return *(double *)a > *(double *)b ? 1 : -1; <wbr><wbr><br>
} <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
qsort(in,100,sizeof(in[0]),cmp); <wbr><wbr></wbr></wbr>
四、对结构体一级排序 <wbr><wbr></wbr></wbr>
struct In <wbr><wbr><br>
{ <wbr><wbr><br>
double data; <wbr><wbr><br>
int other; <wbr><wbr><br>
}s[100] <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写 <wbr><wbr></wbr></wbr>
int cmp( const void *a ,const void *b) <wbr><wbr><br>
{ <wbr><wbr><br>
return ((In *)a)->data - ((In *)b)->data ; <wbr><wbr><br>
} <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
qsort(s,100,sizeof(s[0]),cmp); <wbr><wbr></wbr></wbr>
五、对结构体 <wbr></wbr>
struct In <wbr><wbr><br>
{ <wbr><wbr><br>
int x; <wbr><wbr><br>
int y; <wbr><wbr><br>
}s[100]; <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
//按照x从小到大排序,当x相等时按照y从大到小排序 <wbr><wbr></wbr></wbr>
int cmp( const void *a , const void *b ) <wbr><wbr><br>
{ <wbr><wbr><br>
struct In *c = (In *)a; <wbr><wbr><br>
struct In *d = (In *)b; <wbr><wbr><br>
if(c->x != d->x) return c->x - d->x; <wbr><wbr><br>
else return d->y - c->y; <wbr><wbr><br>
} <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
qsort(s,100,sizeof(s[0]),cmp); <wbr><wbr></wbr></wbr>
六、对字符串进行排序 <wbr><wbr></wbr></wbr>
struct In <wbr><wbr><br>
{ <wbr><wbr><br>
int data; <wbr><wbr><br>
char str[100]; <wbr><wbr><br>
}s[100]; <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
//按照结构体中字符串str的字典顺序排序 <wbr><wbr></wbr></wbr>
int cmp ( const void *a , const void *b ) <wbr><wbr><br>
{ <wbr><wbr><br>
return strcmp( ((In *)a)->str , ((In *)b)->str ); <wbr><wbr><br>
} <wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
qsort(s,100,sizeof(s[0]),cmp); <wbr><wbr></wbr></wbr>
七、计算几何中求凸包的cmp <wbr><wbr></wbr></wbr>
int cmp(const void *a,const void *b) //重点cmp函数,把除了1点外的所有点,旋转角度排序
<wbr><wbr><br>
{ <wbr><wbr><br>
struct point *c=(point *)a; <wbr><wbr><br>
struct point *d=(point *)b; <wbr><wbr><br>
if( calc(*c,*d,p[1]) < 0) return 1; <wbr><wbr><br>
else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直线上,则把远的放在前面
<wbr><wbr><br>
return 1; <wbr><wbr><br>
else return -1; <wbr><wbr><br>
}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
相关推荐
JavaScript中数组sort()方法的基本使用与踩坑记录 在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序。 今天,就数组的 sort 方法来学习一下,避免日后踩坑的...
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = ...
所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行...
Python中的 中的sort()⽅法使⽤基础教程 ()⽅法使⽤基础教程 ⼀、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)iterable指定要排序的list或者...
前言 一直没有系统去看过c++,因为懂得一些c的基本语法,在实际编程中用到c++,只能用到哪些看哪些,发现这样虽然能够完成大部分工作,但是有... 首先来看看std中的快速排序算法sort的使用方法: template void
深度排序与排序基本相同,但深度CNN模型添加了CNN模型以提取受检测器限制的人体部位图像中的特征。 这个CNN模型确实是一个RE-ID模型, 使用的检测器是FasterRCNN,原始源代码是 。 但是,在原始代码中,CNN模型是...
TListView组件使用方法 引用CommCtrl单元 procedure TForm1.Button1Click(Sender: TObject); begin ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,从0开始 end; 用LISTVIEW...
尽管不用于行人跟踪,但可以评估该方法并将其与数据集一起使用。 基本思想可以概括为: 以边界框的形式获取感兴趣的区域,并检测该区域中的特征点。 计算检测到的特征点到框之前的光通量,以提供速度。 根据最低的...
使用Tensorflow进行深层SORT 注意。 该存储库不再由我主动维护。 但是,如果其他人想进行更改,请提出一个Pull请求,我会尽力尽快合并更改。 祝您编码愉快! :) 介绍 该存储库是一种使用的通过...基本用法 输入py
打击排序bash中基本排序算法的实现数组函数bash阵列的各种... 如果要测试某些功能,请使用./sort.bash -t funclist 该代码在MIT许可下按原样发布。 可以在上找到MIT许可证,该许可证包含在主文件顶部,以方便您使用。
# Python 中最基本的冒泡排序方法 def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr arr = [5, 69, ...
React容易排序 一个React组件来对列表或网格中的项目进行排序 该组件的目标是允许通过拖放对...基本用法 import SortableList , { SortableItem } from 'react-easy-sort' import arrayMove from 'array-move' const
也许可以使用一些TCO,但我还不知道如何真正做到这一点,所以无论如何。 永远不要将其用于任何用途。 基本上,这是学习猴子补丁的借口,猴子补丁是如何编写和建造宝石的。 也没有任何测试。 告我 用法 在您的...
一、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)iterable指定要排序的list或者iterable,不用多说; (2)cmp为函数,指定排序时进行比较的...
本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法。分享给大家供大家参考,具体如下: 基本思想: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的...
bitonicSort.java是基本的,使用数组对给定的任何数组进行排序。 -除非它是2的幂并且因为它是一个数组而不能填充,否则它不起作用bitonicSort2.java与bitonicSort.java相同,但是展示了当您尝试对非2的幂的数组进行...
这种方法需要太多线程,因为Future.get()方法是一个阻塞调用。 对于要在合并排序中排序的每个子列表,我们“可能”需要新线程。 如果线程ppool释放了read,则可以使用它而不是创建新线程。 实际数量无法确定,但...
城市就是森林,每一个男人都是猎手,...这里使用的sort方法的参数类型是Comparator,我们就是把Lambda表达式作为Comparator传入sort方法中的。Comparator就是一个函数式接口,那么什么是函数式接口? 函数式接口 函数式
2.插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 3.冒泡法排序基本思想: 将被排序的记录数组R[1..n]...
使用包管理器安装Bubble Sort Python。 pip install bubble-sorter 用法 基本排序 import bubble_sorter sort ( 2 , 1 , 3 , 19 , 8 , 4 ) # returns [1, 2, 3, 4, 8, 19] sort ( 'goose' , 'duck' , 'cow' , '...