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() { ...
随机推荐
- Jquery获取属性值
jq获取某个标签内的属性值:$("#TeamPerformanceYearUl li:eq(0)").attr('data') jq获取li或者td第一个属性(索引值从零开始)$( ...
- 201621123037 《Java程序设计》第6周学习总结
作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...
- [Oracle收费标准]
http://www.oracle.com/us/corporate/pricing/technology-price-list-070617.pdf 1: 数据库 2. 中间件 3. weblogi ...
- java 基础 --Collection(Map)
Map是不是集合?哈哈哈 java编程思想>的第11章,第216页,正数第13行,中原文:“……其中基本的类型是LIst.Set.Queue和Map.这些对象类型也称为集合类,但由于Java类库 ...
- javascript 分号理解
javascript自动填补分号的规则 在说要不要写分号之前,先了解一下javascript自动填补分号的规则. 在<javascript权威指南>中有一段话“如果一条语句以“(”.“[” ...
- 一些Redis面试题
1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,li ...
- 有道云笔记web版本居然不支持火狐
好尴尬的火狐呀....
- 动态Lambda表达式打印HelloWorld
最近在用C#与数据库打交道.开发过程中采用了ORM模型(以前是纯sql玩法,复杂的逻辑用存储过程做). 为了能通过配置文件动态地查询字段,也就是说需要能这样写: db.AsQuery<T> ...
- HDU4822-Tri-War
题目 给出一颗树,\(m\)次询问树上不相同的三个点\(A,B,C\).我们称一个点\(x\)被\(A\)占领当且仅当\(dist(A,x)>dist(B,x),dist(A,x)>dis ...
- Tomcat+JDK安装和配置
Tomcat+JDK安装和配置 一.打开FlashFXP软件,建立连接,选择需要的包,右击传输到 /home/guest中 二.进入到:cd /home/guest中,对tomcat包进行解压 三.将 ...