C库函数qsort七种使用方法示例
这篇文章是 一楼那个学长写的
C库函数qsort七种使用方法示例
七种qsort排序方法<本文中排序都是采用的从小到大排序>
一、对int类型数组排序
C++代码
- int num[100];
Sample:
- int cmp ( const void *a , const void *b )
- {
- return *(int *)a – *(int *)b;
- }
- qsort(num,100,sizeof(num[0]),cmp);
二、对char类型数组排序(同int类型)
C++代码
- char word[100];
Sample:
- int cmp( const void *a , const void *b )
- {
- return *(char *)a – *(char*)b;
- }
- qsort(word,100,sizeof(word[0]),cmp)
三、对double类型数组排序(特别要注意)
C++代码
- double in[100];
- int cmp( const void *a , const void *b )
- {
- return *(double *)a > *(double *)b ? 1 : -1;
- } qsort(in,100,sizeof(in[0]),cmp);
四、对结构体一级排序
C++代码
- struct In {
- double data;
- int other;
- }s[100]
- //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
- int cmp( const void *a ,const void *b)
- {
- return (*(In *)a).data > (*(In *)b).data ? 1 : -1;
- }
- qsort(s,100,sizeof(s[0]),cmp);
五、对结构体二级排序
C++代码
- struct In {
- int x; int y;
- }s[100];
- //按照x从小到大排序,当x相等时按照y从大到小排序
- int cmp( const void *a , const void *b )
- {
- struct In *c = (In *)a;
- struct In *d = (In *)b;
- if(c->x != d->x) return c->x – d->x;
- else return d->y – c->y;
- }
- qsort(s,100,sizeof(s[0]),cmp);
六、对字符串进行排序
C++代码
- 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);
七、计算几何中求凸包的cmp
C++代码
- int cmp(const void *a,const void *b)
- //重点cmp函数,把除了1点外的所有点,旋转角度排序
- {
- struct point *c=(point *)a;
- struct point *d=(point *)b;
- if( calc(*c,*d,p[1]) < 0) return 1;
- 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))
- //如果在一条直线上,则把远的放在前面
- return 1; else return -1;
- }
PS: 其中的qsort函数包含在的头文件里,strcmp包含在的头文件里
大家自己先做下,不要搜代码
NYOJ 7(街区最短路经)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int x[101],y[101];
int x2[101],y2[101];
int cmp(const void*a,const void*b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
while(N--)
{
int i,n,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&x[i],&y[i]);
x2[i]=x[i];
y2[i]=y[i];
}
qsort(x2,n,sizeof(x2[0]),cmp);
qsort(y2,n,sizeof(y2[0]),cmp);
for(i=0;i<n;i++)
{
if((x2[n/2]==x[i])&&(y2[n/2]==y[i]))
{
continue;
}
sum+=abs(x[i]-x2[n/2])+abs(y[i]-y2[n/2]);
}
printf("%d\n",sum);
}
}
return 0;
}
NYOJ 540(奇怪的排序) 来自第五届省赛,简单题
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int mmm;// 数本身
int mm;// 反序后的数
}Node;
Node node[55];
int cmp(const void *a,const void *b)
{
Node *c = (Node *)a;
Node *d = (Node *)b;
return c->mm - d->mm;
}
int main()
{
int N,m,n,i,x,k;
scanf("%d",&N);
while(N--)
{
x=0;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++)
{
x++;
k=i;
node[x].mmm=i;
node[x].mm=0;
while(k)
{
node[x].mm=node[x].mm*10+k%10;
k=k/10;
}
}
qsort(node+1,n-m+1,sizeof(node[1]),cmp);
printf("%d",node[1].mmm);
for(i=2;i<=n-m+1;i++) {
printf(" %d",node[i].mmm);
}
printf("\n");
}
return 0;
}
import java.util.Arrays;
import java.util.Scanner;
public class NYOJ540 {
public static void main(String[] args) {
int from, to, T;
Node node[];
Scanner sc = new Scanner(System.in);
T = sc.nextInt();
int temp;
while(T-->0) {
from = sc.nextInt();
to = sc.nextInt();
node = new Node[to-from+1];
int j = 0;
for(int i=0; i<node.length; i++) {
//q已经初始化为0了
node[i] = new Node();
}
for(int i=from; i<=to; i++) {
node[j].p = i;
temp = i;
while(temp>0) {
/*
* 必须在大while循环构造node数组
* 否则就第一组数据正确
* 因为下面这一句用到了以前的q值
*/
node[j].q = node[j].q*10 + temp%10;
temp /= 10;
}
j++;
}
/*
* 只看API函数,第三个参数是toIndex,以为是下标
* 谁知道具体一看不包括,wa了n次
*/
Arrays.sort(node,0,to-from+1);
System.out.print(node[0].p);
for(int i=1; i<to-from; i++) {
System.out.print(" "+node[i].p);
}
System.out.println(" "+node[to-from].p);
}
}
}
class Node implements Comparable<Node>{
int p;
int q;
public Node() {
this.p = 0;
this.q = 0;
}
@Override
public int compareTo(Node o) {
// TODO Auto-generated method stub
Node other = o;
return this.q - other.q;
}
}
转载于:https://www.cnblogs.com/hpuzyf/p/3237730.html
C库函数qsort七种使用方法示例相关推荐
- qsort七种排序方法
<本文中排序都是采用的从小到大排序> qsort 包含在头文件 #include<stdlib.h> qsort ( 哪个 , 长度 , 大小, cmp) 一.对int类型数 ...
- 10截图时屏幕变大_解锁电脑更多的截屏姿势:Win 10中自带的七种截图方法
说起电脑截图,我们很容易想到的是微信中Alt+A的快捷方式,但如果我们电脑中没有安装微信却要对屏幕内容进行截图应该怎么办?马上下载并安装微信?没有那么复杂,Win 10就自带了多达七种截图方法,熟悉其 ...
- C语言运行时电脑白屏怎么办,win10电脑白屏死机无响怎么回事_win10电脑白屏死机无响七种解决方法...
win10专业版使用一段时间后出现白屏死机的问题,开机后不是登录界面,而是白色屏幕,尝试多次还是一样,怎么办呢?此故障原因无非是硬件或软件两大原因,有什么办法解决呢?此文小编告诉大家解决win10电脑 ...
- html语言单词背不下来,专八词汇背不下来?来看看这七种记忆方法
专八词汇背不下来?来看看这七种记忆方法 01 结合构词法记忆单词 前缀记忆,英语单词前缀很多. 常用前缀有: anti-(反对,防止),co-(共同),de-(离开,除去),dis-(否定,相反), ...
- 连接服务器失败请检查网络是否启用修复程序,Win10出现网络连接问题的七种修复方法...
现如今办公和生活都少不了网络,Win10电脑在连接网络时总出现连接失败,出现这种情况原因比较多,大家首先要找到故障原因,然后在对症下药来处理,今天给大家带来Win10出现网络连接问题的七种修复方法,有 ...
- Win10管理员命令提示符窗口的七种打开方法汇总
Win10管理员命令提示符窗口的七种打开方法汇总 管理员命令提示符是我们在Windows10系统操作中经常使用的功能之一, 管理员命令提示符可以非常直接的运行各种程序.命令等. 如:在管理员命令提示符 ...
- 单例模式(七种实现方法)
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式结构图: 单例模式有多种写法各有利弊,现在我们来看看各种模式写法. 1. 饿汉模式 public class Singleton ...
- 常用的七种数据分析方法有哪些?
一.漏斗分析法 漏斗分析法能够科学反映用户行为状态,以及从起点到终点各阶段用户转化率情况,是一种重要的分析模型.漏斗分析模型已经广泛应用于网站和APP的用户行为分析中,例如流量监控.CRM系统.SEO ...
- 多图详解:七种具体方法增强代码可扩展性
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析.实际应用.架构思维.职场分享.产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习 1 六大原则 在设计 ...
最新文章
- html登录界面cookie,HTML中使用cookie保存登录账户
- python如何训练模型生产_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)...
- Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)
- oracle导入impdp
- oschina mysql limit_如何提高MySQL Limit查询的性能
- 算成绩啦(洛谷P5740、P5741题题解,Java语言描述)
- twitter finagle java_java搭建finagle(2)
- 终极解决办法rvct Cannot obtain license for Compiler (feature compiler) with license version = 3.1...
- PS中新建文件的一些常用预设信息
- python利器app怎么查文献-基于Python的参考文献检索工具开发
- 中国最美的十大宗教名山(图)
- js获取本周日期和上周日期 --- 随手记录备忘
- 饥荒如何解锁机器人_《饥荒》全部人物怎样解锁 全人物解锁条件及方法一览...
- 面试问题某个项目中遇到过什么问题
- win10下MySQL无法运行问题
- 大数据概述:大数据生态系统
- 百度css3背景图代码,CSS3 实现花式背景图案
- 前端——关于元素的装饰效果你知道多少
- 小程序开发——模板与配置
- Q2日活1.86亿创新高 推特还能打好一场翻身战吗?