关闭

【学习排序】

标签: ACM
8434人阅读 评论(2) 收藏 举报
分类:

 2016.05.15-----HDU 1029 Ignatius and the Princess IV

C++ 的algorithm Sort (a,b)从小到大排序

比如:一个数组 int a[6];

Sorta,a+6)就是从小到到排序这个数组

(一)为什么要用c++标准库里的排序函数
Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!
(二)c++标准库里的排序函数的使用方法
I)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!
II)Sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

Sort函数使用模板:
Sort(start,end,排序方法)
下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明!
例一:sort函数没有第三个参数,实现的是从小到大

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
 int a[10]={9,6,3,8,5,2,7,4,1,0};
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
sort(a,a+10);
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 return 0;
}
例二
通过上面的例子,会产生疑问:要实现从大到小的排序肿么办?
 这就如前文所说需要在sort()函数里的第三个参数里做文章了,告诉程序我要从大到小排序!
需要加入一个比较函数 complare(),此函数的实现过程是这样的
bool complare(int a,int b)
{
 return a>b;
}
这就是告诉程序要实现从大到小的排序的方法!
#include<iostream>
#include<algorithm>
using namespace std;
bool complare(int a,int b)
{
 return a>b;
}
int main()
{
 int a[10]={9,6,3,8,5,2,7,4,1,0};
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 sort(a,a+10,complare);//在这里就不需要对complare函数传入参数了,//这是规则
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 return 0;
}
例三:
通过上面例一、二的方法虽然实现了从大到小和从大到小的排序,这样做还是有点麻烦,因为还需要自己编写告诉程序执行何种排序的原则的函数,c++标准库强大的功能完全可以解决这种麻烦。
Sortt函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则
less<数据类型>()//从小到大排序
greater<数据类型>()//从大到小排序
结合本例子,这样的就可以完成你想要的任何一种排序原则了
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
 int a[10]={9,6,3,8,5,2,7,4,1,0};
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
sort(a,a+10,less<int>());
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
 int a[10]={9,6,3,8,5,2,7,4,1,0};
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 sort(a,a+10,greater<int>());
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 return 0;
}
例四:利用sort函数还可以实现对字符的排序,排序方法大同小异,下面就把程序范例展示一下
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
 char a[11]="asdfghjklk";
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 sort(a,a+10,greater<char>());
 for(int i=0;i<10;i++)
 cout<<a[i]<<endl;
 return 0;
}

0
0
查看评论

排序学习简介

译排序学习简介,翻译自李航老师的《A Short Introduction to Learning to Rank》
  • clheang
  • clheang
  • 2016-06-15 20:42
  • 5005

学习排序算法简介

学习排序算法简介 学习排序(Learning to Rank, LTR)是一类基于机器学习方法的排序算法。 传统经典的模型,例如基于TFIDF特征的VSM模型,很难融入多种特征,也就是除了TFIDF特征之外,就无法融入其他种类的特征了。 而机器学习的方法很容易融...
  • puqutogether
  • puqutogether
  • 2014-12-24 09:35
  • 2292

机器学习之排序学习综述

 1   排序学习的简介 Web Search 的历史经历了传统的 “text retrieval” 到 “基于link analysis的搜索引擎”,目前,由于机器学习和数据挖掘的技术不断成熟,利用统计模型来解决rank问题已经成为一个hot topic: Learni...
  • linux_lihuafeng
  • linux_lihuafeng
  • 2014-07-25 08:42
  • 1343

LTR学习排序 Learning to Rank 小结

出处:http://blog.csdn.NET/nanjunxiao/article/details/8976195 学习排序(Learning to Rank) LTR(Learning torank)学习排序是一种监督学习(SupervisedLearning)的排序...
  • u011331731
  • u011331731
  • 2017-06-01 16:57
  • 313

学习排序Learning to Rank之RankNet

今天给大家介绍一个Learning to Rank系列算法中的一个:RankNet。Learning to Rank最常用的地方就是搜索引擎,它能从用户的搜索、点击数据中学习出搜索结果的排序函数,以改善当前的检索模型。
  • OrthocenterChocolate
  • OrthocenterChocolate
  • 2015-01-27 22:13
  • 2718

机器学习排序较多用于广告系统而很少用在搜索排序

主要原因有二:  1.在机器学习系统里,弄清楚为什么一个检索结果比另一个结果排序更高很困难。某一个具体策略的原因非常难以捉摸。很多机器学习算法均是黑盒,顶多告诉一些权重与模型,它们很难表述清楚一个具体策略的原因;  2.在一些场景下,即使人已经成功的分辨出基于哪些因素,使得一...
  • helihongzhizhuo
  • helihongzhizhuo
  • 2017-02-23 18:09
  • 673

检索模型与搜索排序 学习

布尔模型 仅仅根据term后续的倒排列表进行布尔运算,获取最终的返回结果.无法进行排序打分. 空间向量模型 将搜索语句当成一片文档来解析成n维度空间中的某个点,与已经存在的原始文档在该维度中的做比较,根据夹角等因素算出数值进行排序. 首先需要计算每个t...
  • sqh201030412
  • sqh201030412
  • 2016-10-31 19:52
  • 737

GBDT(梯度提升决策树)

gbdt树分为两种, (1)残差版本    残差其实就是真实值和预测值之间的差值,在学习的过程中,首先学习一颗回归树,然后将“真实值-预测值”得到残差,再把残差作为一个学习目标,学习下一棵回归树,依次类推,直到残差小于某个接近0的阀值或回归树数目达到某一阀值。其核心思想是每轮通过拟合残...
  • qqliuzihan
  • qqliuzihan
  • 2018-01-10 23:32
  • 18

【学习排序】 Learning to Rank中Pointwise关于PRank算法源码实现

讲述的就是Learning to Rank中Pointwise的认识及PRank算法的实现.主要从以下四个方面进行讲述: 1.学习排序(Learning to Rank)概念 2.基于点的排序算法(Pointwise)介绍 3.基于顺序回归(Ordinal Regressio...
  • Eastmount
  • Eastmount
  • 2015-01-28 05:36
  • 18177

主动排序学习算法之PRank

PRank算法摘自梁斌博客         PRank是一个pointwise的监督学习排序的方法,一般被用作baseline。我看了下论文,然后动手写了个小实验,进行了理解。       ...
  • piaoxuefengqi
  • piaoxuefengqi
  • 2013-12-25 10:15
  • 2067
    个人资料
    • 访问:746957次
    • 积分:5609
    • 等级:
    • 排名:第5599名
    • 原创:213篇
    • 转载:25篇
    • 译文:0篇
    • 评论:97条
    博客专栏
    最新评论