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() { ...
随机推荐
- Learn Docker(一)—软件安装与常规操作
一.安装Docker Windows平台 在Windows10 X64专业版上可以直接下载Docker原生应用进行安装,在控制面板的程序与功能里启用Hyper-v,之后就可以运行docker程序啦. ...
- TCP系列43—拥塞控制—6、Congestion Window Validation(CWV)
一.概述 在RFC2861中,区分了TCP连接数据传输的三种状态 After sending a data segment: If tcpnow - T_last >= RTO ...
- 3dContactPointAnnotationTool开发日志(三一)
在玩的时候遇到了一个python的问题: Traceback (most recent call last): File ".\convert.py", line 13, in ...
- PAT 甲级 1023 Have Fun with Numbers
https://pintia.cn/problem-sets/994805342720868352/problems/994805478658260992 Notice that the number ...
- win7仿win98电脑主题
http://ys-d.ys168.com/599631823/S7hMfgo3M382J764IOJ8/plus98_for_windows_7_by_ansonsterling.zip
- javascript+html5+css3下拉刷新 数据效果
文章摘自:suchso.com/projecteactual/javascript-html5-css3-taobao-xiala-data.html segmentfault.com/a/11900 ...
- Asp.net MVC 获取IPv4 地址
public static string GetIP4Address() { string IP4Address = String.Empty; foreach (IPAddress IPA in D ...
- Linux进入单用户模式(passwd root修改密码)
进入单用户模式——passwd root修改密码 1.在grub 页面输入a,进入修改内核模式 2.在内核的结尾“/”,输入空格,在输入single,回车 3.启动系统,进入单用户模式 4.Passw ...
- 【BZOJ2460】元素(贪心,线性基)
[BZOJ2460]元素(贪心,线性基) 题面 BZOJ Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到 ...
- 【SYZOJ279】滑稽♂树(树套树)
[SYZOJ279]滑稽♂树(树套树) 题面 SYZOJ CJOJ 题目描述 zzsyz实验楼里面种了一棵滑稽树,只有滑稽之力达到大乘期的oier才能看到.虽然我们看不到,但是还是知道一些信息: 这真 ...