qsort函数辅助函数compare函数的编写

qsort的第四个参数,辅助函数compare的关于不同排序对象的不同写法:

一、对int类型数组排序

int num[100];
int compare(const void *a, const void *b)
{
  return *(int *)a - *(int *)b;
}

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

char word[100];
int compare(const void *a, const void *b)
{
  return *(char *)a - *(int *)b;
}

三、对double类型数组排序

double array[100];
int compare(const void *a, const void *b)
{
  return *(double *)a > *(double *)b ? 1 : -1;
}

注意qsort第三个参数是sizeof(array[0])。

四、对结构体一级排序

typedef struct node
{
    double data;
    int other;
}Node;
array[100];

int compare(const void *a, const void *b)
{
    return ((Node *)a)->data > ((Node *)b)->data ? 1 : -1;
}

五、对结构体二级排序

typedef struct node
{
    int x;
    int y;
}Node;
Node array[100];
//按照x从小到大排序,当x相等时按照y从大到小排序
int compare(const void *a, const void *b)
{
    Node *p1 = (Node *)a;
    Node *p2 = (Node *)b;
    if (p1->x != p2->x)
        return p1->x - p2->x;
    else
        return p1->y - p2->y;
}

六、对字符串进行排序

typedef struct node
{
    int other;
    char string[100];
}Node;
Node array[100];
//按照结构体中字符串string的字典顺序排序
int compare(const void * a, const void * b)
{
    return strcmp(((Node *)a)->string, ((Node *)b)->string);
时间: 2024-10-21 03:33:53

qsort函数辅助函数compare函数的编写的相关文章

qsort函数、sort函数 (精心整理篇)

先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定).集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题.所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分. 具体介绍:-^^ void qsort( void *base, size_t n

qsort函数、sort函数 (精心整理篇)(转载)

qsort函数.sort函数 (精心整理篇) 先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的. 首先说一下, qsort qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定).集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题.所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分. 具体介绍:-^^ void qsor

C++中compare函数的使用

compare函数用来进行字符串以及其子串的比较,示例如下: #include <iostream> #include <string> #include <cctype> using std::cout; using std::endl; using std::cin; using std::string; int main(void){ string str1="hi,test,hello"; string str2="hi,test&

编写高质量代码——运算符重载,是成员函数还是友元函数

一.运算符重载的四项基本原则: ▍不可臆造运算符. ▍运算符原有操作数的个数.优先级和结合性不能改变. ▍操作数中至少一个是自定义类型. ▍保持运算符的自然含义. ============================== 二.运算符重载的两种形式: ▍成员函数形式(隐含一个参数 this 指针): 1)双目运算符:参数一个 2)单目运算符:不能显示的声明参数 ▍友元函数形式(不存在隐含的参数 this 指针) 1)双目运算符:两个参数 2)单目运算符:一个参数 ===============

hadoop中compare函数

在看hadoop  的二次排序的时候,改写了下, 加了第三个参数,  本来以为是在 public int compareTo(IntPair o) { System.out.println("-----------compareTo"); if (first != o.first) { return first < o.first ? -1 : 1; } else if (second != o.second) { return second < o.second ? -1

【c语言】编写一个函数,这个函数可以将一个整数的指定位置1或置0

// 编写一个函数,这个函数可以将一个整数的指定位置1或置0 #include <stdio.h> int set_bit(int a, int pos, int flag) { int b = 1 << (pos - 1); if (flag == 0) { a &= ~b; } else { a |= b; } return a; } int main() { printf("%d\n", set_bit(2, 1, 1));// 3 printf(

32、C++中compare函数的使用

compare函数用来进行字符串以及其子串的比较,示例如下: #include <iostream> #include <string> #include <cctype> using std::cout; using std::endl; using std::cin; using std::string; int main(void){ string str1="hi,test,hello"; string str2="hi,test&

qosrt函数及sort函数

想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy 对给定区间复制并排序 nth_element 找出给定区间的某个位置对应的元素 is_sorted 判断一个区间是否已经排好序 par

C语言基础知识----指针数组 &amp;&amp; 数组指针 &amp;&amp; 函数指针 &amp;&amp;指针函数

指针数组 && 数组指针 char (*ptr)[5]; //定义一个指向数组指针ptr,指向包含5个char类型的数组 char *a[5]; //定义一个指针数组a,包含5个char*类型指针 #include <stdio.h> int main(void) {     char *a[5]={"red","white","blue","dark","green"};