栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

好的参考卡/备忘单,具有C语言中的基本排序算法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

好的参考卡/备忘单,具有C语言中的基本排序算法?

我为我的一个学习C的朋友做了这个,也许您会发现它有用:

#include <stdlib.h>#include <string.h>static void swap(int *a, int *b) {    if (a != b) {        int c = *a;        *a = *b;        *b = c;    }}void bubblesort(int *a, int l) {    int i, j;    for (i = l - 2; i >= 0; i--)        for (j = i; j < l - 1 && a[j] > a[j + 1]; j++) swap(a + j, a + j + 1);}void selectionsort(int *a, int l) {    int i, j, k;    for (i = 0; i < l; i++) {        for (j = (k = i) + 1; j < l; j++) if (a[j] < a[k])     k = j;        swap(a + i, a + k);    }}static void hsort_helper(int *a, int i, int l) {    int j;    for (j = 2 * i + 1; j < l; i = j, j = 2 * j + 1)        if (a[i] < a[j]) if (j + 1 < l && a[j] < a[j + 1])     swap(a + i, a + ++j); else     swap(a + i, a + j);        else if (j + 1 < l && a[i] < a[j + 1]) swap(a + i, a + ++j);        else break;}void heapsort(int *a, int l) {    int i;    for (i = (l - 2) / 2; i >= 0; i--)        hsort_helper(a, i, l);    while (l-- > 0) {        swap(a, a + l);        hsort_helper(a, 0, l);    }}static void msort_helper(int *a, int *b, int l) {    int i, j, k, m;    switch (l) {        case 1: a[0] = b[0];        case 0: return;    }    m = l / 2;    msort_helper(b, a, m);    msort_helper(b + m, a + m, l - m);    for (i = 0, j = 0, k = m; i < l; i++)        a[i] = b[j < m && !(k < l && b[j] > b[k]) ? j++ : k++];}void mergesort(int *a, int l) {    int *b;    if (l < 0)        return;    b = malloc(l * sizeof(int));    memcpy(b, a, l * sizeof(int));    msort_helper(a, b, l);    free(b);}static int pivot(int *a, int l) {    int i, j;    for (i = j = 1; i < l; i++)        if (a[i] <= a[0]) swap(a + i, a + j++);    swap(a, a + j - 1);    return j;}void quicksort(int *a, int l) {    int m;    if (l <= 1)        return;    m = pivot(a, l);    quicksort(a, m - 1);    quicksort(a + m, l - m);}struct node {    int value;    struct node *left, *right;};void btreesort(int *a, int l) {    int i;    struct node *root = NULL, **ptr;    for (i = 0; i < l; i++) {        for (ptr = &root; *ptr;) ptr = a[i] < (*ptr)->value ? &(*ptr)->left : &(*ptr)->right;        *ptr = malloc(sizeof(struct node));        **ptr = (struct node){.value = a[i]};    }    for (i = 0; i < l; i++) {        struct node *node;        for (ptr = &root; (*ptr)->left; ptr = &(*ptr)->left);        a[i] = (*ptr)->value;        node = (*ptr)->right;        free(*ptr);        (*ptr) = node;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号