首页 > 其他分享 >qsort

qsort

时间:2024-11-15 13:43:49浏览次数:3  
标签:people int void qsort 排序 size

qsort快速排序函数

1.qsort函数简介

qsort是C标准库中的一个函数,用于对数组进行快速排序。它定义在头文件<stdlib.h>中。qsort函数的原型如下:

void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
  • 参数说明
    • base:指向要排序的数组的指针,即数组首元素地址
    • num:数组中的元素个数。
    • size:每个元素的大小(以字节为单位)。
    • compar:指向比较函数的指针,该函数用于确定两个元素的相对顺序。

官方英文版参数说明

  • base:Pointer to the first object of the array to be sorted, converted to a void*.

  • num:Number of elements in the array pointed to by base.

    size_t is an unsigned integral type.

  • size:Size in bytes of each element in the array.

    size_t is an unsigned integral type.

  • compar:Pointer to a function that compares two elements.

    This function is called repeatedly by qsort to compare two elements.

2. 比较函数

比较函数是一个用户自定义的函数,用于比较两个元素。它的原型如下:

int compar(const void *a, const void *b);
  • 参数说明
    • ab:指向要比较的两个元素的指针。
  • 返回值
    • 如果a小于b,则返回负值。
    • 如果a等于b,则返回0。
    • 如果a大于b,则返回正值。

3. 1示例代码

下面是一个使用qsort函数对整数数组进行排序的例子:

#include <stdio.h>
#include <stdlib.h>

// 比较函数,用于比较两个整数的大小
int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);				//用于升序排序
 // return (*(int *)b - *(int *)a);	  			  用于降序排序
}

int main() {
    int arr[] = {5, 2, 9, 1, 5, 6};
    size_t arr_size = sizeof(arr) / sizeof(arr[0]);

    printf("排序前的数组: ");
    for (size_t i = 0; i < arr_size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 调用qsort函数进行排序
    qsort(arr, arr_size, sizeof(int), compare);

    printf("排序后的数组: ");
    for (size_t i = 0; i < arr_size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

4. 1运行结果

编译并运行上述程序,输出结果如下:

排序前的数组: 5 2 9 1 5 6 
排序后的数组: 1 2 5 5 6 9 

3. 2示例代码

下面是一个使用qsort函数对结构体数组进行降序排序的例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义一个结构体类型
typedef struct {
    char name[50];
    int age;
} Person;

// 比较函数,用于比较两个Person结构体的age字段,按降序排序
int compare(const void *a, const void *b) {
    Person *personA = (Person *)a;
    Person *personB = (Person *)b;
    return personB->age - personA->age; // 降序排序
}

int main() {
    // 初始化结构体数组
    Person people[] = {
        {"Alice", 30},
        {"Bob", 25},
        {"Charlie", 35},
        {"David", 20}
    };
    size_t people_size = sizeof(people) / sizeof(people[0]);

    printf("排序前的数组:\n");
    for (size_t i = 0; i < people_size; i++) {
        printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
    }

    // 调用qsort函数进行排序
    qsort(people, people_size, sizeof(Person), compare);

    printf("\n排序后的数组:\n");
    for (size_t i = 0; i < people_size; i++) {
        printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
    }

    return 0;
}

4. 2运行结果

编译并运行上述程序,输出结果如下:

排序前的数组:
Name: Alice, Age: 30
Name: Bob, Age: 25
Name: Charlie, Age: 35
Name: David, Age: 20

排序后的数组:
Name: Charlie, Age: 35
Name: Alice, Age: 30
Name: Bob, Age: 25
Name: David, Age: 20

标签:people,int,void,qsort,排序,size
From: https://blog.csdn.net/2301_81570594/article/details/143796990

相关文章

  • 深⼊理解指针(5)[回调函数、qsort相关知识(qsort可用于各种类型变量的排序)】
     目录1.回调函数2.qsort相关知识(qsort可用于各种类型变量的排序)一   回调函数    1定义/作用:把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数时,被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅......
  • qsort使用和模拟
    我们先来了解一下qsort的如何使用,qsort也是一种排序,是快速排序quick sort使用qsort时要包含#include<stdlib.h>qsort的参数非常多,让我们来一一了解:voidqsort(void*base,//第一个参数,base指向的是待排序数组中首元素的地址size_tnum,//......
  • sort() 排序和qsort() 排序(超详细)
    目录前言一、qsort()是什么?1.核心代码:函数的原型参数含义:实际使用(一般只对qsor()函数进行微调)以整形数组进行演示2.其他类型比较一级排序二级排序多级排序二、sort()是什么?1.自动调用(从小到大)2.自定义调用一级排序多级排序三.sort()排序和qsort()排序的区别及各自特......
  • qsort排序
    在体操比赛中,每位选手的得分是由多名裁判综合打分所得。现在已经汇总了N名选手的个人总得分(选手的编号依次为1,2,……N),请你设计程序找出第K名选手在所有选手中的排名。输入说明:第一行是N和K,N表示运动员的个数,K是选手序号;第二行依次是这N位运动员的个人总得分。输出说明:第K名(从1开......
  • qsort函数的学习与使用
    零.导言    在之前的文章中,我介绍了冒泡排序,即按ASCII码值把元素从小到大排序(文章链接我放在了第五部分,有兴趣的小伙伴可以求看看)。而今天我将继续介绍qsort函数,这个函数可以起到和冒泡排序一样的作用,并且有着更加广泛的应用场景。一.qsort函数的定义    qso......
  • c语言模拟实现qsort
    要想模拟首先qsort函数首先我们应该知道这个函数的功能是什么接下来我为大家引入一个列子我们想要实现一组有序数的升序可以通过冒泡排序法思想是 两两相邻元素进行比较 代码如下 通过冒泡排序法 #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>voidbubbl......
  • 【C语言】qsort库函数
    使用qsort排数组升序:代码:#include<stdio.h>#include<stdlib.h>intcmp_int(constvoid*e1,constvoid*e2){ return*(int*)e1-*(int*)e2;}//使用qsort排升序voidtest1(){ intarr[]={9,8,7,6,5,4,3,2,1,0}; intsz=sizeof(arr)/sizeof(arr[0]); ......
  • 9.27 代码练习,以及教你写自己的qsort函数
    学生成绩系统代码include<stdio.h>typedefstructStudent{intnum;charname[50];intgrade[10];}stu;intcmp(intcount[],int*n){intmax=0;for(inti=0;i<*n;i++){if(count[i]>max){max=count[i];}}returnmax;}intmain(){int......
  • C语言——使用回调函数模拟实现qsort
    同学们还记得之前我们已经学过一种排序方法叫“冒泡排序“嘛。代码直接附上咯voidbubble_sort(intarr[],intsz){ inti=0;//趟数 for(i=0;i<sz-1;i++) { intj=0; for(j=0;j<sz-i-1;j++) { if(arr[j]>arr[j+1]) { inttmp=......
  • 函数qsort的使用与冒泡排序模拟实现qsort
    目录一.qsort函数的使用示例二.使用冒泡排序模拟实现qsort函数二.1.冒泡排序 二.2.模拟实现qsort函数一.qsort函数的使用1.1.qsort函数是用来排序任意数据类型的数组,对其中的元素进行一定规则的排列2.qsort不返回任何值3.qsort的第一个参数是一个void*指针,指向......