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. 创建Windows类别

    Windows在表单.控制.对话框基本上形成.Windows类是Windows形式的类型,可处理叙述性说明. 在Windows提前有很多定义Windows类别,但它可以很容易地创建自己的Windows ...

  2. JNDI数据源配置注意事项

    假设是在原有project上改动 1,applicationContext.xml中改动当中的value值 <bean id="dataSource" class=" ...

  3. ReactJS入门二

    ReactJS入门学习二 ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事 ...

  4. Cannot update paths and switch to branch at the same time(转)

    当使用git进行操作: git checkout -b local-name origin/remote-name 出现错误: fatal: git checkout: updating paths ...

  5. [cocos2dx注意事项009]试用quick-cocos2dx-2.2.4

    quick-cocos2d-x 在中国站http://quick.cocoachina.com/?page_id=40,用他们自己的话说:quick-cocos2d-x(后文简称 quick)与 co ...

  6. 【软件project】生存期模型(含图)

    为了反映软件生存周期内各个工作应怎样组织,各阶段怎样衔接,须要软件开发模型给出直观图示表达.软件开发模型是软件思想的详细化,是实施在过程模块中的软件开发方法和工具. 以下来介绍开发模型的特点以及他们的 ...

  7. 运营商网络採用SDN所面临的挑战(一)

    运营商网络採用SDN所面临的挑战(一) Babak Samimi 将数据平面.控制平面与管理平面分隔开来所实现的软件定义网络(SDN)改善了OPEX及CAPEX,而且使得网络资源的集中调配和管理成为可 ...

  8. 分析RAC下一个SPFILE整合的三篇文章的文件更改

    大约RAC下一个spfile分析_整理在_2014.4.17 说明:文章来源于网络 第一篇:RAC下SPFILE文件改动 在RAC下spfile位置的改动与单节点环境不全然一致,有些地方须要特别注意, ...

  9. Tair LDB基于Prefixkey中期范围内查找性能优化项目总结

    "Tair LDB基于Prefixkey该范围内查找性能优化"该项目是仅一个月.这个月主要是熟悉项目..以下从几个方面总结下个人在该项目上所做的工作及自己的个人所得所感. 项目工作 ...

  10. Cocos2d-x学习笔记(两)Cocos2d-x总体框架

    原创文章.转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38680123 前言 上一节我们简单分析了HelloWorldproje ...