qsort源码:实现快速排序的C语言qsort函数

qsort()函数是一个快速排序算法,它能够根据用户提供的比较函数来对数组中的元素进行排序。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

qsort()函数是一个快速排序算法,它能够根据用户提供的比较函数来对数组中的元素进行排序。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

是qsort()函数的C语言实现:


c
void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *))
{
    if (nmemb <= 1)
        return;
    char *pivot = base + (nmemb - 1) * size;
    char *left = base;
    char *right = pivot - size;
    while (left < right) {
        while (left < right && compar(left, pivot) <= 0)
            left += size;
        while (left < right && compar(right, pivot) >= 0)
            right -= size;
        if (left < right) {
            char tmp[size];
            memcpy(tmp, left, size);
            memcpy(left, right, size);
            memcpy(right, tmp, size);
        }
    }
    if (compar(left, pivot) > 0) {
        char tmp[size];
        memcpy(tmp, left, size);
        memcpy(left, pivot, size);
        memcpy(pivot, tmp, size);
    }
    qsort(base, (left - base) / size, size, compar);
    qsort(left + size, (nmemb - 1 - (left - base) / size), size, compar);
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(5)
java是什么意思一种高效、可靠的编程语言
上一篇
java现状最受欢迎的编程语言,让你的开发更加高效
下一篇

相关推荐

  • xcode怎么用c语言:#include int main(){ printf(\n***** Welcome to C

    Xcode是苹果公司开发的集成开发环境,可以用来开发Mac OS X,iOS,watchOS和tvOS应用程序。它可以用来开发Objective-C,Swift和C++等语言,也可以用来开发C语言程序。下面给出一个使用C语言在Xcode中编写的示例代码:…

    2023-08-06 12:51:36
    0 56 59
  • fortran语言编程实践:为“Hello World”的程序program hello_world implicit non

    Fortran语言编程实践是指使用Fortran语言来编写程序,以解决实际问题。Fortran语言最初由IBM开发,是一种面向数值计算的编程语言,特别适合于科学和工程计算,具有高效的运行性能。下面是一个使用Fortran语言编写的程序,该程序用于计算一个整数的平方根:…

    2023-04-12 11:30:31
    0 29 20
  • javascript培训网:如何快速掌握JavaScript编程语言?

    javascript培训网是一个专门提供javascript培训服务的网站,它旨在帮助用户掌握javascript的基本知识,以及如何使用javascript来开发网页应用程序。javascript培训网提供了一系列的课程,包括javascript基础、javascript进阶、javascript实战等,学习者可以根据自己的能力水平选择适合自己的课程。…

    2023-08-22 12:30:26
    0 28 32
  • C语言源程序扩展名:C语言:.mm扩展名代表什么 (what does m m stand for)

    关于C语言源程序扩展名的问题,在what does m m stand for中经常遇到,具有一些 Objective-C 的项目具有一些 C 类,其实现文件具有.mm扩展名。…

    2024-02-17 11:08:14
    0 67 19
  • C语言加减乘除:Hackerrank:加减

    关于C语言加减乘除的问题,在plus minus hackerrank solution c++中经常遇到,我试图在数组中找到正,负和零的分数,但函数没有返回任何东西。…

    2023-11-08 12:10:36
    0 12 18
  • R语言c:C语言中的换行符是什么:\ r或\ n(newline c)

    关于R语言c的问题,在newline c中经常遇到,C 中的换行符是什么?我知道不同的 OS 有不同的行尾字符,但它们被翻译成 C 换行符。那个字符是什么?…

    2023-12-28 03:50:56
    0 91 47
  • C语言排名次:Oracle 19C中多个列的排名

    关于C语言排名次的问题,在rank function in oracle中经常遇到,你能建议一个简单的方法来计算 Oracle 19c 中多个列的排名。…

    2024-03-27 06:41:56
    0 23 55
  • C语言assert函数:什么是“assert”函数

    关于C语言assert函数的问题,在assert function in c中经常遇到,我一直在学习 OpenCV 教程,遇到了assert函数;它做什么?…

    2023-10-24 09:53:11
    0 98 50

发表评论

登录 后才能评论

评论列表(74条)