qsort 排序功能 总结
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 排序功能 总结的更多相关文章
- 禁用datagridview中的自动排序功能
把datagridview中的自动排序功能禁用自己收集的两种方法,看看吧①DataGridView中的Columns属性里面可以设置.进入"EditColumns"窗口后,在相应的 ...
- ListBox实现拖拽排序功能
1.拖拽需要实现的事件包括: PreviewMouseLeftButtonDown LBoxSort_OnDrop 具体实现如下: private void LBoxSort_OnPreviewMou ...
- 简单实现Redis缓存中的排序功能
1.在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发 ...
- Java实现中文字符串的排序功能
package test; /** * * @Title 书的信息类 * @author LR * @version 1.0 * @since 2016-04-21 */ public class B ...
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能 由于MYSQL没有提供类似ORACLE中OVER()这样丰富的分析函数. 所以在MYSQ ...
- nls_sort和nlssort 排序功能介绍
nls_sort和nlssort 排序功能介绍 博客分类: oracle ALTER SESSION SET NLS_SORT=''; 排序影响整个会话 Oracle9i之前,中文是按照二进制编码 ...
- [WPF]ListView点击列头排序功能实现
[转] [WPF]ListView点击列头排序功能实现 这是一个非常常见的功能,要求也很简单,在Column Header上显示一个小三角表示表示现在是在哪个Header上的正序还是倒序就可以了. ...
- qsort排序算法
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , ...
- MVC5 Entity Framework学习参加排序、筛选和排序功能
上一篇文章实现Student 基本的实体CRUD操作.本文将展示如何Students Index页添加排序.筛选和分页功能. 以下是排序完成时.经过筛选和分页功能截图,您可以在列标题点击排序. 1.为 ...
随机推荐
- Telephone Lines USACO 月赛
以前做过这套题目 这个题又重新写了:http://www.cnblogs.com/jh818012/archive/2013/05/05/3182681.html 还是以前的思路 一直错在一个地方:决 ...
- hdu4705 Y 简单树形DP 2013多校训练第十场 J题
题意:求一棵树中不在一条链中的三个点的对数. 转化一下,用总对数减去在一条链上的三点对数即可. 考虑经过根节点,然后可能是不同的子树中各选一个:或者是子树中选一个,然后当前节点为根的子树以外的节点选一 ...
- ArcGIS for Silverlight 地图卷帘
原文:ArcGIS for Silverlight 地图卷帘 ArcGIS 地图卷帘 for Silverlight 地图卷帘,其实就是遮罩的效果,在Silverlight里实现这样的效果,对于熟悉S ...
- hdu2844 & poj1742 Coin ---多重背包--两种方法
意甲冠军:你有N种硬币,每个价格值A[i],每个号码C[i],要求. 在不超过M如果是,我们用这些硬币,有多少种付款的情况下,.那是,:1,2,3,4,5,....,M这么多的情况下,,你可以用你的硬 ...
- 使用Team Foundation Server 2012源代码管理基本
原文:使用Team Foundation Server 2012源代码管理基本 本篇体验Team Foundation Server 2012安装及源代码管理. □ 安装 搜索"team ...
- Tick and Tick------HDOJ杭州电(无法解释,直接看代码)
Problem Description The three hands of the clock are rotating every second and meeting each other ma ...
- 关于ACM,关于CSU
原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...
- libmsgque官方主页
libmsgque 消息队列(MESSAGE QUEUE)库项目简析 注: 本文如果你已经有linux开发环境 请确保你使用本库时是tag版本号. target=libmsgque-1.0 本项目採用 ...
- blog_导航
blog导航 在左下侧:随笔分类 简要做个导航图放到这儿方便大家查阅 直奔爬虫: 点击-> 直奔oracle:点击->
- AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel
原文:AJAX 怎样在一个UpDatePanel中刷新另一个updatePanel 在页面上(.aspx)<asp:UpdatePanel ID="MyID1" runat= ...