qsor快排序以及cmp函数
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
举例:
|
Compare 函数的返回值
|
描述
|
|---|---|
|
< 0
|
elem1将被排在elem2前面
|
|
0
|
elem1 等于 elem2
|
|
> 0
|
elem1 将被排在elem2后面
|
int find(char b,char a)
{
if(a <= 'Z' && a >= 'A' && b <= 'Z' && b >= 'A')
return a < b;
if(a <= 'z' && a >= 'a' && b <= 'z' && b >= 'a')
return a < b;
if(a <= 'Z' && a >= 'A' && b <= 'z' && b >= 'a')
return a + 32 <= b;
if(a<='z' && a >='a' && b <= 'Z' && b >= 'A')
return a < (b + 32);
}
int cmp(const void *a,const void *b)
{
return find(*(char *)a,*(char *)b); //*(char *)a就是取a指向的内容的意思
}
3.int a[1000][2];二维数组
qsort(a,1000,sizeof(int)*2,cmp);
int comp(const void*a,const void*b)
{
return((int*)a)[0]-((int*)b)[0];
}
4.对字符串进行排序
int Comp(const void*p1,const void*p2)
{
return strcmp((char*)p2,(char*)p1);
}
int main()
{
char a[MAX1][MAX2];
initial(a);
qsort(a,lenth,sizeof(a[0]),Comp);
//lenth为数组a的长度
5.按结构体中某个关键字排序(对结构体一级排序)
structNode
{
double data;
int other;
}s[100];
int Comp(constvoid*p1,constvoid*p2)
{
return(*(Node*)p2).data>(*(Node*)p1).data?1:-1;
}
qsort(s,100,sizeof(s[0]),Comp);
6.按结构体中多个关键字排序(对结构体多级排序)[以二级为例]:
struct Node
{
int x;
int y;
}s[100];
//按照x从小到大排序,当x相等时按y从大到小排序
int Comp(const void*p1,const void*p2)
{
struct Node*c=(Node*)p1;
struct Node*d=(Node*)p2;
if(c->x!=d->x)returnc->x-d->x;
else return d->y-c->y;
}
7.对结构体中字符串进行排序:
struct Node
{
int data;
char str[100];
}s[100];
//按照结构体中字符串str的字典序排序
int Comp(const void*p1,const void*p2)
{
return strcmp((*(Node*)p1).str,(*(Node*)p2).str);
}
qsort(s,100,sizeof(s[0]),Comp);
qsor快排序以及cmp函数的更多相关文章
- PAT甲题题解-1038. Recover the Smallest Number (30)-排序/贪心,自定义cmp函数的强大啊!!!
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789138.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- leetcode-179-Largest Number(理解规则,自定义cmp函数进行排序)
题目描述: 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明 ...
- sort cmp函数的写法 (特判排序 二级排序)
特判排序: 看看以下cmp写法,猜想作用: 该函数作用就是“将正数升序排列, 负数排到最后” 我认为cmp函数的一个特性就是, 如果return false, 那么函数就会将他们互换位置, retur ...
- 小球(总结sort和cmp函数、结构体排序)
问题 N: 小球(点击) 时间限制: 1 Sec 内存限制: 128 MB ...
- C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法
这个问题屡次碰到解决之后再次遇到又忘记怎么弄了,这次打算彻底搞清楚. ·C 首先对所谓字符数组的排序应该是对(char)*a[]数组而非(char)a[][]进行的排序,后者是无法直接调用qsort实 ...
- IDEA最常用快捷键汇总+快速写出Main函数
IDEA可以说是当下Java程序员日常开发的神器,但是想要发挥这款神器的牛逼威力,必须得熟练使用它的各种快捷键才行.本篇总结下使用IDEA(也就是IntelliJ IDEA )进行日常开发中最常用的快 ...
- C++中的sort函数和⾃定义cmp函数
写在最前面,本文摘录于柳神笔记: sort 函数在头⽂件 #include ⾥⾯,主要是对⼀个数组进⾏排序( int arr[] 数组或 者 vector 数组都⾏), vector 是容器,要⽤ v ...
- qsort的cmp函数理解
qsort使用 近期频繁使用qsort函数,但是对于cmp函数却一直不太熟悉,现用现查.故写一篇小笔记记录一下. 函数原型: void qsort(void *base,size_t NumEle,s ...
- Oracle01——基本查询、过滤和排序、单行函数、多行函数和多表查询
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7272236.html Oracle的集群 Oracle的体系结构 SQL> --当 ...
随机推荐
- Struts2 看1
Struts2部分 1. JavaEE软件三层结构和MVC的区别? JavaEE软件三层机构是由sun公司提供JavaEE开发规范的:Web层(表现层).业务逻辑层.数据持久层.[其中WEB层会使用前 ...
- keystone组件
引: 什么是keystone 为何要有keystone keystone的功能 keystone概念详解 keystone与openstack其他组件关系 k ...
- [学习笔记]Vfork深入理解
#include<stdio.h> #include<stdlib.h> #include<string.h> #include <unistd.h> ...
- Java代码执行机制
一.java源码编译机制 一个java文件编译为.class文件的流程图. Parse an Enter阶段: Parse:将代码字符串转换为token序列(com.sun.tools.javac.p ...
- Winform定时启动
System.Timers.Timer t; ; int qian; int bai; int shi; int ge; public 测试定时启动() { InitializeComponent() ...
- Python3中简单的迭代器程序
1.迭代器程序(实现菲比那次数列并且可以抛出与接收异常) def fib(max): n,a,b = 0,0,1 while n < max: #print(b) yield b a,b = b ...
- [MOOC程序设计与算法二] 递归二
1.表达式计算 输入为四则运算表达式,仅由整数.+.-.* ./ .(.) 组成,没有空格,要求求其值.假设运算符结果都是整数 ."/"结果也是整数 表达式也是递归的定义: 表达式 ...
- Ready api groovy script 参数化
def token_type =context.expand ('${#Project#token_type}') def access_token = context.expand('${#Proj ...
- 「十二省联考 2019」字符串问题——SAM+DAG
题目 [题目描述] Yazid 和 Tiffany 喜欢字符串问题.在这里,我们将给你介绍一些关于字符串的基本概念. 对于一个字符串 $S$, 我们定义 $\lvert S\rvert$ 表示 $S$ ...
- CF1096G Lucky Tickets 快速幂套FFT
\(\color{#0066ff}{ 题目描述 }\) 一个\(n\)位数,每位可以是给出的\(k\)个数码中的一个数,可以有前导\(0\),输出前\(n/2\)位之和与后\(n/2\)位之和相等的方 ...