c语言中使用自带的qsort(结构体排序)+ 快排
c中没有自带的sort函数emm
不过有自带的qsort函数
(其实用法都差不多(只是我经常以为c中有sort
头文件要用
#include <stdlib.h>
一定要重新把指针指向的值赋值给一个node类型,不然比较不了
struct node{
int d,id,tmp;
}a[N];
int cmp(const void *x,const void *y){
struct node xx = *(struct node*)x;
struct node yy = *(struct node*)y;
return xx.d-yy.d;
}
qsort(a+,n,sizeof(a[]),cmp);//调用 排序a[1]~a[1+n]
这里贴一个代码,实现的功能是给定一个数组(数组中每个数不一样),然后输入一些数,问你这些数在数组中的位置(从0开始编号)
(其实是我看错题的产物(写都写了(就是实现一下离散化而已,当个小例子看吧
#include <stdio.h>
#include <string.h>
#include <stdlib.h> #define N 2*100010 struct node{
int d,id,tmp;
}a[N];
int b[N],q[N],ans[N]; int cmp(const void *x,const void *y){
struct node xx = *(struct node*)x;
struct node yy = *(struct node*)y;
return xx.d-yy.d;
} int main()
{
//freopen("a.in","r",stdin);
int n,m;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i].d);
a[i].id=i;
a[i].tmp=;
}
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%d",&q[i]);
a[n+i].d=q[i];
a[n+i].id=i;
a[n+i].tmp=;
}
qsort(a+,n+m,sizeof(a[]),cmp);
int now=,p=;
for(int i=;i<=n+m;i++)
{
if(i== || a[i].d!=p) now++;
p=a[i].d;a[i].d=now;
if(a[i].tmp==) b[now]=a[i].id;
}
for(int i=;i<=n+m;i++)
{
if(a[i].tmp==) ans[a[i].id]=b[a[i].d];
}
for(int i=;i<=m;i++)
printf("%d\n",ans[i]-);
return ;
}
还写了一个纯排序的代码,非结构体的。手写快排,或者用系统自带qsort
#include<stdio.h>
#include<string.h>
#include<stdlib.h> int n,a[];
void quicksort(int a[],int l,int r)
{
int i=l,j=r,key=a[l];
if(l>=r)return;
while(i!=j)
{
while(i<j && a[j]>=key) j--;
a[i]=a[j];
while(i<j && a[i]<=key) i++;
a[j]=a[i];
}
a[i]=key;
quicksort(a,l,i-);
quicksort(a,i+,r);
} int cmp(const void *x,const void *y){
// int xx=*(int *)x;
// int yy=*(int *)y;
// return xx-yy;
return *(int *)x-*(int *)y;
} int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
// quicksort(a,1,n);
qsort(a+,n,sizeof(a[]),cmp);
for(int i=;i<=n;i++) printf("%d%c",a[i],(i==n) ? '\n':' ');
return ;
}
c语言中使用自带的qsort(结构体排序)+ 快排的更多相关文章
- C语言中两个相同类型的结构体变量之间是可以相互直接赋值的
C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量 ...
- go语言的排序、结构体排序
原文:https://studygolang.com/articles/1598 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 searc ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...
- 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- 【C++】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- qsort 与sort 对结构体排序实例
qsort 与sort 对结构体排序实例 #include<bits/stdc++.h> using namespace std; typedef struct { string book ...
- C++中的空类与空结构体大小
今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { }; int main() { ...
随机推荐
- Python_1
转载来源:http://www.cnblogs.com/wupeiqi/articles/4906230.html python内部执行过程如下: python解释器在加载 .py 文件中的代码时,会 ...
- Alpha事后诸葛亮(团队)
设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件要解决用手机使没有指纹验证硬件的电脑可以利用指纹进行文件的加密.定义的很清楚.我们针对的是 ...
- MDL
1 先是mdl的数据结构. 2 下面根据用法逐步的讲解mdl数据结构的含义:一般用法,先是 IoAllocateMdl :原型为: 最常用的是VirtualAddress和Length.把自己的Non ...
- 【第六周】关于beta测试组员评分标准的若干意见
组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块 评分规则:简单的才是坠吼的,本组不想搞个大新闻,所以奉行极简的评分方式.每一个人交给组长一个排名,假如 ...
- 【Leetcode】445. Add Two Numbers II
You are given two non-empty linked lists representing two non-negative integers. The most significan ...
- 【week8】psp~~进度条
本周psp 项目 内容 开始时间 结束时间 中断时间 净时间 10月7日 星期一 论文 看生物信息方面的论文 10:00 12:00 5 115 写代码 注册信息从前台传入servlet 18:00 ...
- 【vue】index.html main.js app.vue index.js怎么结合的? 怎么打包的?搜集的信息
转载:https://blog.csdn.net/yudiandemingzi/article/details/80247137 怎么结合的: 一.启动项目 第一步:cmd进入项目文件里,运行npm ...
- web移动开发最佳实践之js篇
一.js概述 js即JavaScript,是被设计用来验证表单.检测浏览器.创建cookies.改进设计以及更多应用的网络脚本语言,它非常容易使用.在web应用中,它是主要的编程语言,主要用途是进行各 ...
- 分布式架构核心RPC原理
在应用的迭代演进过程中,随着系统访问量提高,业务复杂度提高,代码复杂度提高,应用逐渐从单体式架构向面向服务的分布式架构转变.RPC(Remote Procedure Call Protocol远程过程 ...
- Linux 重定向输出到多个文件中
转自:http://codingstandards.iteye.com/blog/833695 用途说明 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我们 ...