`
xuela_net
  • 浏览: 493834 次
文章分类
社区版块
存档分类
最新评论

sort()基本用法

 
阅读更多

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&gt;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&gt;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 &gt; *(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)-&gt;data - ((In *)b)-&gt;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-&gt;x != d-&gt;x) return c-&gt;x - d-&gt;x; <wbr><wbr><br> else return d-&gt;y - c-&gt;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)-&gt;str , ((In *)b)-&gt;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]) &lt; 0) return 1; <wbr><wbr><br> else if( !calc(*c,*d,p[1]) &amp;&amp; dis(c-&gt;x,c-&gt;y,p[1].x,p[1].y) &lt; dis(d-&gt;x,d-&gt;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源代码】JavaScript中数组sort()方法的基本使用与踩坑记录.docx

    JavaScript中数组sort()方法的基本使用与踩坑记录  在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序。 今天,就数组的 sort 方法来学习一下,避免日后踩坑的...

    python中的sort方法使用详解

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 x = ...

    go语言中sort包的实现方法与应用详解

    所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行...

    Python中的sort()方法使用基础教程.pdf

    Python中的 中的sort()⽅法使⽤基础教程 ()⽅法使⽤基础教程 ⼀、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)iterable指定要排序的list或者...

    C++ 关于STL中sort()对struct排序的方法

    前言  一直没有系统去看过c++,因为懂得一些c的基本语法,在实际编程中用到c++,只能用到哪些看哪些,发现这样虽然能够完成大部分工作,但是有... 首先来看看std中的快速排序算法sort的使用方法:  template  void

    deep_sort_pytorch:使用Deepsort和yolov3与pytorch进行MOT跟踪

    深度排序与排序基本相同,但深度CNN模型添加了CNN模型以提取受检测器限制的人体部位图像中的特征。 这个CNN模型确实是一个RE-ID模型, 使用的检测器是FasterRCNN,原始源代码是 。 但是,在原始代码中,CNN模型是...

    listview基本用法

    TListView组件使用方法 引用CommCtrl单元 procedure TForm1.Button1Click(Sender: TObject); begin ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,从0开始 end; 用LISTVIEW...

    SORT_OF:扩展SORT的卡尔曼滤波器测量模型,以添加从“光流”中得出的速度分量

    尽管不用于行人跟踪,但可以评估该方法并将其与数据集一起使用。 基本思想可以概括为: 以边界框的形式获取感兴趣的区域,并检测该区域中的特征点。 计算检测到的特征点到框之前的光通量,以提供速度。 根据最低的...

    TensorflowDeepSortTracking:基于DeepSort算法的带跟踪的Tensorflow对象检测

    使用Tensorflow进行深层SORT 注意。 该存储库不再由我主动维护。 但是,如果其他人想进行更改,请提出一个Pull请求,我会尽力尽快合并更改。 祝您编码愉快! :) 介绍 该存储库是一种使用的通过...基本用法 输入py

    bash-sort:bash中基本排序算法的实现

    打击排序bash中基本排序算法的实现数组函数bash阵列的各种... 如果要测试某些功能,请使用./sort.bash -t funclist 该代码在MIT许可下按原样发布。 可以在上找到MIT许可证,该许可证包含在主文件顶部,以方便您使用。

    基本算法python冒泡排序

    # Python 中最基本的冒泡排序方法 def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(n-i-1): if arr[j] &gt; arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr arr = [5, 69, ...

    react-easy-sort:一个React组件来对列表或网格中的项目进行排序

    React容易排序 一个React组件来对列表或网格中的项目进行排序 该组件的目标是允许通过拖放对...基本用法 import SortableList , { SortableItem } from 'react-easy-sort' import arrayMove from 'array-move' const

    rand_sort:具有不确定性能特征的数组排序

    也许可以使用一些TCO,但我还不知道如何真正做到这一点,所以无论如何。 永远不要将其用于任何用途。 基本上,这是学习猴子补丁的借口,猴子补丁是如何编写和建造宝石的。 也没有任何测试。 告我 用法 在您的...

    Python中的sort()方法使用基础教程

    一、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]])  参数解释:  (1)iterable指定要排序的list或者iterable,不用多说;  (2)cmp为函数,指定排序时进行比较的...

    PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法。分享给大家供大家参考,具体如下: 基本思想: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的...

    Bitonic-Merge-Sort:Bitonic-Merge-Sort的Java实现

    bitonicSort.java是基本的,使用数组对给定的任何数组进行排序。 -除非它是2的幂并且因为它是一个数组而不能填充,否则它不起作用bitonicSort2.java与bitonicSort.java相同,但是展示了当您尝试对非2的幂的数组进行...

    concurrent-merge-sort

    这种方法需要太多线程,因为Future.get()方法是一个阻塞调用。 对于要在合并排序中排序的每个子列表,我们“可能”需要新线程。 如果线程ppool释放了read,则可以使用它而不是创建新线程。 实际数量无法确定,但...

    死磕Lambda表达式(二):Lambda的使用

    城市就是森林,每一个男人都是猎手,...这里使用的sort方法的参数类型是Comparator,我们就是把Lambda表达式作为Comparator传入sort方法中的。Comparator就是一个函数式接口,那么什么是函数式接口? 函数式接口 函数式

    几种常见的排序方法

    2.插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 3.冒泡法排序基本思想: 将被排序的记录数组R[1..n]...

    Bubble-Sort-Python:一个教育模块,演示了冒泡排序算法的效率。 小数据集的理想选择。 还包含一个“ speed_test”功能,以查看您的计算机可以排序的速度!

    使用包管理器安装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' , '...

Global site tag (gtag.js) - Google Analytics