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(结构体排序)+ 快排的更多相关文章

  1. C语言中两个相同类型的结构体变量之间是可以相互直接赋值的

    C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量 ...

  2. go语言的排序、结构体排序

    原文:https://studygolang.com/articles/1598 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 searc ...

  3. 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

    函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...

  4. 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...

  5. 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  6. 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  7. 【C++】从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...

  8. qsort 与sort 对结构体排序实例

    qsort 与sort 对结构体排序实例 #include<bits/stdc++.h> using namespace std; typedef struct { string book ...

  9. C++中的空类与空结构体大小

    今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { }; int main() { ...

随机推荐

  1. erlang转化中文为url

    今天使用http get 方法时,参量中有中文而导致出错. 例如http://abc.com/abc?arg=中文,在erlang使用http:request方法失败. 后来查了url的规范,url中 ...

  2. 使用ssh公钥登陆

    记录一下使用的具体命令,具体参考: Centos设置禁止密码登录而只使用密钥登录SSH方法  优先参考这个. ssh使用公钥授权不通过的问题解决 Xshell配置ssh免密码登录-密钥公钥(Publi ...

  3. Solr初步研究

    Solr是一个高性能,采用Java5开发,Solr基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化,并且提供 ...

  4. IT就业·软件工程之我见

    随着计算机技术的飞速发展,让人们深切感受到科技让生活更美好的真正含义. 现如今我们的正常生活,社交都越来越离不开网络和终端,因特网和各种终端设备的组合让我们即使相距千里,也能面对面对话交流:购物,我们 ...

  5. 【final】Scrum站立会议第2次....11.20

    小组名称:nice! 组长:李权 成员:于淼  刘芳芳韩媛媛 宫丽君 项目内容:约跑app(约吧) 时间:2016.11.9    12:00——12:30 地点:传媒西楼220室 本次对fnal阶段 ...

  6. NLP 入门

    作者:微软亚洲研究院链接:https://www.zhihu.com/question/19895141/answer/149475410来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  7. brush

    简介 Brushing是一个通过点击或触摸来选择一个一维或二维区域的交互操作,比如可以通过点击鼠标并移动. brush经常被用来选择离散的元素比如散点图中的点或桌面上的文件等.它也可以被用来放大选中的 ...

  8. request之setAtrribute

    当在servlet中有request.SetAtrribute("AtriruteName",AtrributeValue)语句时,在jsp页面获取AtrributeValue有两 ...

  9. C++解析(3):布尔类型与三目运算符

    0.目录 1.布尔类型 2.三目运算符 3.小结 1.布尔类型 C++中的布尔类型: C++在C语言的基本类型系统之上增加了bool C++中的bool可取的值只有true和false 理论上bool ...

  10. 【转】实现虚拟机VMware上linux与windows互相复制与粘贴

    1.点击虚拟机-->安装vm tool 2.完成后在系统桌面会出现一个tar文件,解压到tmp目录 下 3.终端cd到该文件夹下,执行./vmware-install.pl 一路回车到底.4.重 ...