140806暑期培训.txt
来源:互联网 发布:网络教育培训加盟 编辑:程序博客网 时间:2024/06/05 12:24
1、结构体中字符串的qsort方法
struct In
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典顺序排序
int cmp ( const void *a , const void *b )
{
return strcmp( (*(In *)a).str , (*(In *)b).str );
}
qsort(s,100,sizeof(s[0]),cmp);
-----需要两个头文件#include<stdlib.h>
#include<string.h>
2、sort排序方法(要比qsort简单很多)
#include<algorithm>
using namespace std; 头文件
这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。
也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,
只要写sort(a,a+100)就行了,默认的排序方式是升序。
拿“AC的策略”这题来说,需要对数组t的第0到len-1的元素排序,就写sort(t,t+len);
如果是没有定义小于运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数。
比较函数是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。
想把刚才的整数数组按降序排列,可以先定义一个比较函数cmp
bool cmp(int a,int b) //需要排序的数据是什么类型,这里就定义什么类型
{
return a<b;//升序排列
//return b>a;//降序排列
}
排序的时候就写sort(a,a+100,cmp);
假设自己定义了一个结构体node
struct node
{
int a;
int b;
double c;
}arr[100];
有一个node类型的数组node arr[100],想对它进行排序:
先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。
就可以写这样一个比较函数:
以下是代码片段:
bool cmp(node x,node y)//一元素
{
return x.a<y.a;
}
int cmp(node x,node y) //二元素
{
if(x.a != y.a) //升序排列
return x.a < y.a; //优先排的部分
return x.b < y.b; //被动排的部分
}
bool cmp(node x,node y)//三元素
{
if(x.a!=y.a) return x.a>y.a;
if(x.b!=y.b) return x.b>y.b;
if(x.c!=y.c) return x.c>y.c;
}
排序时写sort(arr,arr+100,cmp);
- 140806暑期培训.txt
- 140724暑期培训.txt
- 140725暑期培训.txt
- 140726暑期培训.txt
- 140728暑期培训.txt
- 140729暑期培训.txt
- 140730暑期培训.txt
- 140731暑期培训.txt
- 140801暑期培训.txt
- 140802暑期培训.txt
- 140804暑期培训.txt
- 140805暑期培训.txt
- 140807暑期培训.txt
- 140808暑期培训.txt
- 140811暑期培训.txt
- 140813暑期培训.txt
- 140815暑期培训.txt
- 140819暑期培训.txt
- 改进bpnn
- J2EE逐项攻破(二)——Servlet基本原理
- java 对象类型转换之子对象转化成父对象
- stl疑问三:any_of, none_of,all_of解析(c++11 特型的说明)
- 操作符
- 140806暑期培训.txt
- POJ 2115 (模线性方程 -> 扩展欧几里得)
- 资源分享
- 使用纯的javaScript制作右下角类似腾讯新闻弹出框效果
- Windows下Qt4与PCL点云库安装与联调
- Google地图下载代码实现
- POJ 3468 A Simple Problem with Integers(成段更新)
- STL中慎重选择删除元素的方法
- DB2 rollforward命令使用详解