qsort包括在<stdlib.h>头文件里。此函数依据你给的比較条件进行高速排序,通过指针移动实现排序。

排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比較函数。

函数原型:

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

使用方法以及參数说明:

Sorts the num elements of the array pointed by base, each element size bytes

long, using the comparator function to determine the order.

The sorting algorithm used by this function compares pairs of values by calling the specified comparator function with two pointers to elements
of the array.

The function does not return any value, but modifies the content of the array pointed by base reordering its elements to the newly sorted order.

base Pointer to the first element of the array to be sorted.(数组起始地址)

num Number of elements in the array pointed by base.(数组元素个数)

size Size in bytes of each element in the array.(每个元素的大小)

comparator Function that compares two elements.(函数指针。指向比較函数)

1、The function must accept two parameters that are pointers to elements, type-casted as void*. These parameters should be cast back to some data type and be compared.

2、The return value of this function should represent whether elem1 is considered less than, equal to, or greater than elem2 by returning, respectively, a negative value, zero or a positive value.

Return Value none (无返回值)

>>>1. 对整形数据进行排序:(从小到大)

int Num[1010];

qsort(Num, n, sizeof(int), cmp);

int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}

从大到小:

int cmp(const void *a, const void *b)
{
return *(int *)b - *(int *)a;
}

>>>2. 对char數據進行排序:

char str[1010];

qsort(str, sizeof(str), sizeof(char), cmp);

int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}

>>>3. 對double數據進行排序:

double Num[1010];

qsort(Num, n, sizeof(double), cmp);

int cmp(const void *a, const void *b)
{
return *(double *)a > *(double *)b ? 1 : -1;
}

>>>4. 對結構體數據進行排序:

typedef struct Node_
{
int data;
int position;
}Node; Node Num[1010]; qsort(Node, n, sizeof(Node), cmp); int cmp(const void *a, const void *b)
{
Node *p1 = (Node *)a;
Node *p2 = (Node *)b;
if(p1->data != p2->data) return p1->data - p2->data;
else return p1->position - p2->position;
}

實例:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#define MAXN 1010
#define RST(N)memset(N, 0, sizeof(N))
using namespace std; typedef struct Node_
{
char name[MAXN];
int data;
int position;
}Node; Node N[MAXN]; int cmp(const void *a, const void *b) //先對data進行從大到小,position和name從小到大排序
{
Node *p1 = (Node *)a;
Node *p2 = (Node *)b;
if(p1->data != p2->data) return p2->data - p1->data;
else if(p1->position != p2->position) {
return p1->position - p2->position;
}else return strcmp(p1->name, p2->name);
} int main()
{
int n;
while(~scanf("%d", &n)) {
for(int i=0; i<n; i++) {
scanf("%s %d %d", N[i].name, &N[i].data);
N[i].position = i;
}
qsort(N, n, sizeof(Node), cmp);
printf("------------------------------------\n");
for(int i=0; i<n; i++) {
printf("%s %d %d\n", N[i].name, N[i].data, N[i].position);
}
}
return 0;
}

qsort 排序功能 总结的更多相关文章

  1. 禁用datagridview中的自动排序功能

    把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...

  2. ListBox实现拖拽排序功能

    1.拖拽需要实现的事件包括: PreviewMouseLeftButtonDown LBoxSort_OnDrop 具体实现如下: private void LBoxSort_OnPreviewMou ...

  3. 简单实现Redis缓存中的排序功能

    1.在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发 ...

  4. Java实现中文字符串的排序功能

    package test; /** * * @Title 书的信息类 * @author LR * @version 1.0 * @since 2016-04-21 */ public class B ...

  5. MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能

    MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能 由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQ ...

  6. nls_sort和nlssort 排序功能介绍

    nls_sort和nlssort 排序功能介绍 博客分类: oracle   ALTER SESSION SET NLS_SORT=''; 排序影响整个会话 Oracle9i之前,中文是按照二进制编码 ...

  7. [WPF]ListView点击列头排序功能实现

    [转]   [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...

  8. qsort排序算法

      七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a ,  ...

  9. MVC5 Entity Framework学习参加排序、筛选和排序功能

    上一篇文章实现Student 基本的实体CRUD操作.本文将展示如何Students Index页添加排序.筛选和分页功能. 以下是排序完成时.经过筛选和分页功能截图,您可以在列标题点击排序. 1.为 ...

随机推荐

  1. 新秀翻译(两)——使用Java通用配置模板方法模式

    假设你发现你已经非常重码,你可能会考虑使用模板的方法来消除easy重复错误代码.下面是一个示例:以下两类,他完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件. 读取每一行并解析: ...

  2. Jquery 分页插件 Jquery Pagination

    Jquery 分页插件 Jquery Pagination 分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也 ...

  3. 用java字节码解释i++和++i(转)

    这几天抽着一些时间,把Java的class文件结构研究了一下,再后来就想起了这个令人厌烦的问题,想从字节码指令的角度看看,java到底是怎么处理这个的 先看一段java代码 package bishi ...

  4. unix cd使用命令

    [语法]:     cd   [夹] [说明]:此命令用于工作文件以改变当前的文件夹,使用环境变量没有参数$HOME 作为它的参数,$HOME 路径通常在注册时输入. [抽样]: cd   文件夹 c ...

  5. linux后台server开发环境的部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))

    linux后台server开发环境部署配置 引言 背景 随着互联网业务的不断增多.开发环境变得越来越复杂,为了便于统一server端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3( ...

  6. ASP.NET 5- 1

    ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目   ASP.NET入门(1) - 建立和开发ASP.NET 5 项目 建立项目 首先,目前只有VS 2015支持开发最新的ASP ...

  7. Dom中的nodeName、nodeValue 、nodeType

    nodeName.nodeValue 以及 nodeType 包含有关于节点的信息. nodeName 属性含有某个节点的名称. 元素节点的 nodeName 是标签名称 属性节点的 nodeName ...

  8. linux_cp_远程copy

    1:远程copy  [linux对linux 远程拷贝]   scp 文件名  root@远程ip:/路径/    将本地home目录下的test.tar的文件拷贝到远程主机192.168.1.23的 ...

  9. UVALive 6472 Powers of Pascal

    标题手段: 他给了一个无限Pascal阵,定义了powers,然后询问power为P的pascal矩阵里面的第R行C列的元素是多少. 最開始读错题意了...然后 就成了一个神得不得了的题了.后来请教的 ...

  10. 嵌Ruby 2 《捆绑》

    本章主要介绍 Ruby Object 与C++对象绑定 //====================================================================== ...