qsort 模板

转:http://blog.csdn.net/fans_men/article/details/6955606

七种qsort排序法

<本文中排序都是采用的从小到大排序>

其中的在c语言中qsort函数包含在<stdlib.h>的头文件里,strcmp包含在<string.h>的头文件里。

一、对int类型数组排序

[cpp] view plaincopy

  1. int num[n];
  2. int cmp(const void *a,const void *b)
  3. {
  4. return *(int *)a-*(int *)b;
  5. }
  6. qsort(num,n,sizeof(num[0]),cmp);

二、对char类型数组排序(同int类型)

[cpp] view plaincopy

  1. char c[n];
  2. int cmp(const void *a,const void *b)
  3. {
  4. return *(char *)a-*(char *)b;
  5. }
  6. qsort(c,n,sizeof(c[0]),cmp);

三、对double类型数组排序(要特别注意)

[cpp] view plaincopy

  1. double num[n];
  2. int cmp(const void *a,const void *b)
  3. {
  4. return *(double *)a>*(double *)b ? 1 : -1;
  5. }
  6. qsort(num,n,sizeof(num[0]),cmp);

四、对结构体一级排序

[cpp] view plaincopy

  1. struct stu
  2. {
  3. double data;
  4. int other;
  5. }s[n];
  6. /*按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可
  7. 以很多种,参考上面的例子写
  8. */
  9. int cmp(const void *a,const void *b)
  10. {
  11. return (*(struct stu *)a).data>(*(struct stu *)b).data ? 1 : -1;
  12. }
  13. qsort(s,n,sizeof(struct stu),cmp);

五、对结构体二级排序

[cpp] view plaincopy

  1. struct stu
  2. {
  3. int x;
  4. int y;
  5. }s[n];
  6. //按照x从小到大排序,当x相等时按照y从大到小排序
  7. int cmp(const void *a,const void *b)
  8. {
  9. struct stu *c=(stu *)a;
  10. struct stu *d=(stu *)b;
  11. if(c->x != d->x) return c->x - d->x;
  12. else return d->y - c->y;
  13. }
  14. qsort(s,n,sizeof(s[0]),cmp);

六、对字符串进行排序

[cpp] view plaincopy

  1. struct str
  2. {
  3. int data;
  4. char c[100];
  5. }s[n];
  6. //按照结构体中字符串c的字典顺序排序
  7. int cmp(const void *a,const void *b)
  8. {
  9. return strcmp((*(str *)a).c,(*(str *)b).c);
  10. }
  11. qsort(s,n,sizeof(s[0]),cmp);

七、计算几何中求凸包的cmp

[cpp] view plaincopy

  1. //重点cmp函数,把除了1点外的所有点,旋转角度排序
  2. int cmp(const void *a,const void *b)
  3. {
  4. struct point *c=(point *)a;
  5. struct point *d=(point *)b;
  6. if(calc(*c,*d,p[1])<0) return 1;
  7. else if(!calc(*c,*d,p[1])&&dis(c->x,c->y,p[1].x,p[1].y)<dis(d->x,d->y,p[1].x,p[1].y))
  8. //如果在一条直线上,则把远的放在前面
  9. return 1;
  10. else return -1;
  11. }

qsort 模板

时间: 2024-08-29 02:44:09

qsort 模板的相关文章

STL:快速排序模板qsort(转载)

 qsort  用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针  int fcmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } (注:当fcmp返回-1,则a会被排在b的前

【模板小程序】链表排序(qsort/insert_sort/merge_sort)

前言 本文章整理了链表排序的三种方法,分别是快速排序.插入排序.归并排序.为适应不同用途,先给出常用的int版本,再在此基础上抽象出类模板. 目录 一.针对整数的版本(常用) 文中链表定义 链表相关操作 三种排序方法 完整测试程序 二.模板版本(适用性广泛) 文中链表定义 链表相关操作 三种排序方法 完整测试程序 总结 参考文章 一.针对整数的版本(常用) 文中链表定义: 1 //definition for singly-linked list. 2 struct ListNode 3 { 4

讨论关于C++当中的模板实现(上)

C++ 当中的模板,通常作为处理由于参数类型不同,而引入的代码冗余情况. 首先,我们讨论的是函数模板. 要讨论这个问题,我们先讨论如果实现一个通用的加法函数,该怎样去做? 方法一 :使用C++当中的函数重载 int ADD(const int num1, const int num2) {  return (num1+num2); } double ADD(const double num1, const double num2) {  return (num1 + num2); } int m

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义. 在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢: (2)质量:标准库的都是经过严格测试的,正确性有保证: (3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平: (4)良好的编程风格:采用行业中普遍的做法进行开发. 一.C++标准库 C++标准库的内容分为10类, 分别是:C1.语

一个数组类【模板类】

这学期的大作业感觉挺简单的,就是写一个模板类MyList,实现一些Python中的list的操作(类似于c++中的vector,但是不支持迭代器).这些功能都很简单,唯一麻烦的就是模板类特别烦,特别是友元函数,首先要声明这个类,然后声明是函数的声明,然后是类中友元函数的声明,最后是实现.友元函数的声明还有一个问题就是声明时在函数名后面要加上一个<>就像这样: friend void Qsort<>(T a[],int low,int high,bool less); 还有一个要注意

克鲁斯卡尔(模板题)

http://acm.hdu.edu.cn/showproblem.php?pid=1372 以前真二,模板题 OJ真奇怪,有时能A有时W, #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; struct node { int x,y,z; }q[100*101/2+1]; int m,n; int sum=0

快排模板

#include<iostream> #include<cstdio> #include<cmath> using namespace std; void quicksort(int a[],int left,int right) { int i,j,base; i=left; j=right; base=a[(i+j)/2]; while (i<=j){ while (a[i]<base) i++; while (a[j]>base) j--; if

二分查找 模板

1 int bsearch(int l, int h, int k)//二分查找函数 2 { 3 int i, mid; 4 5 while(l<=h){ 6 mid = l+(h-l)/2; 7 if(X[mid]>k) 8 h = mid-1; 9 else if(X[mid]<k) 10 l = mid+1; 11 else 12 break; 13 } 14 return mid; 15 } 1 int max_bsearch(int l, int h, int k)//求上界

kruskal 算法模板

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2896 #include <stdio.h> #include <string.h> #include <stdlib.h> struct node { int u,v,w; }q[200001]; int bin[50001]; int n,m,ans; int cmp(const void *a,const void