美文网首页
[习题35]快速排序

[习题35]快速排序

作者: AkuRinbu | 来源:发表于2019-01-14 22:29 被阅读12次

使用教材

《“笨办法” 学C语言(Learn C The Hard Way)》
https://www.jianshu.com/p/b0631208a794

  • 完整源码 : liblcthw

https://github.com/zedshaw/liblcthw

  • 源文件路径
    liblcthw/src/lcthw/darray_algos.c
    liblcthw/src/lcthw/darray_algos.h
    liblcthw/tests/darray_algos_tests.c

标准C库中的排序函数

  • 快速排序 qsort
    快速排序 qsort

void qsort( void *ptr, size_t count, size_t size, int (*comp)(const void *, const void *) );
ptr - 指向待排序的数组的指针
count - 数组的元素数目
size - 数组每个元素的字节大小
comp - 比较函数。若首个参数小于第二个,则返回负整数值,若首个参数大于第二个,则返回正整数值,若两参数相等,则返回零。
https://en.cppreference.com/w/c/algorithm/qsort

部分源码

  • 取自 liblcthw/src/lcthw/darray_algos.h
typedef int (*DArray_compare) (const void *a, const void *b);

int DArray_qsort(DArray * array, DArray_compare cmp);
  • 取自 liblcthw/src/lcthw/darray_algos.c
#include <lcthw/darray_algos.h>
#include <stdlib.h>

int DArray_qsort(DArray * array, DArray_compare cmp)
{
    qsort(array->contents, DArray_count(array), sizeof(void *), cmp);
    return 0;
}
  • 取自 liblcthw/tests/darray_algos_tests.c
#include <lcthw/darray_algos.h>

int testcmp(char **a, char **b)
{
    return strcmp(*a, *b);
}

char *run_sort_test(int (*func)(DArray *, DArray_compare), const char *name)
{
    DArray *words = create_words();
    mu_assert(!is_sorted(words), "words should start not sorted.");

    debug("---- Testing %s sorting algorithm", name);
    int rc = func(words, (DArray_compare)testcmp);
    mu_assert(rc == 0, "sort failed");
    mu_assert(is_sorted(words), "didn't sort it");

    DArray_destroy(words);

    return NULL;
}

char *test_qsort()
{
    return run_sort_test(DArray_qsort, "qsort");
}
  • int rc = func(words, (DArray_compare)testcmp);这里的DArray_compare来自darray_algos.htypedef int (*DArray_compare) (const void *a, const void *b);一个回调函数做了另一个回调函数的参数

复习回顾

  • 关于回调函数

https://www.jianshu.com/p/a63b9575c86a

  • 理解 TYPE **a;

https://www.jianshu.com/p/41379374bae7

相关文章

  • [习题35]快速排序

    使用教材 《“笨办法” 学C语言(Learn C The Hard Way)》https://www.jiansh...

  • chapter 11

    1. 内容## 讲了插入排序和快速排序以及它们的优化。 1.1 插入排序### 1.2 快速排序### 2. 习题...

  • 算法基础课1 快速排序 归并排序 整数二分 浮点数二分

    1:快速排序 先上模板 然后是习题 785. 快速排序 快速排序的基本思想是基于分治大致思想是假设我们有一个集合q...

  • 快速排序(理解)

    快速排序,如果想搞清楚快速排序,主要是为了应付简单的习题,比如选择,填空之类的。可以看这个,如果想深入理解,并想掌...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 面试准备--排序

    堆排序 快速排序(simple) 快速排序(regular) 归并排序 Shell排序 插入排序 选择排序 冒泡排序

  • 排序

    插入排序 选择排序 冒泡排序 归并排序 快速排序* 三路快速排序

  • 算法笔记01-排序#2

    快速排序敢叫快速排序,那它一定得快。 快速排序 概述 快速排序也是分治排序的典型,它快,而且是原地排序。不过,要防...

  • PHP 实现快速排序

    导语 这篇了解下快速排序。 快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-...

  • 【习题35】

    【程序35】题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

网友评论

      本文标题:[习题35]快速排序

      本文链接:https://www.haomeiwen.com/subject/rxlsdqtx.html