文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>算法学习笔记之排序--基于指针的插..

算法学习笔记之排序--基于指针的插..

时间:2010-10-27  来源:juxiangwu

/*
 * main.c
 *
 *  Created on: 2010-10-27
 *      Author: Jenson
 */

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

int fncmp(const void * a, const void * b);

void insert_sort(void ** arr, int n, int(* cmp)(const void *,
        const void *));

int main() {
    int(*cmp)(const void *, const void *) = &fncmp;

    int *values[7] = { 0, -1, -2, 3, 4, -55 };
    int **arr = values;
    insert_sort(arr, 6, cmp);
 
    int i;
    for (i = 0; i < 6; i++) {
        printf("%d\t", arr[i]);
    }
    return 0;
}

int fncmp(const void *a, const void *b) {
    int aa = a;
    int bb = b;
    printf("%d,%d\t", aa, bb);
    if (aa > bb) {
        return 1;
    } else if (aa == bb) {
        return 0;
    } else {
        return -1;
    }
}

void insert_sort(void ** arr, int n, int(* cmp)(const void *,
        const void *)) {
    int j;
    for (j = 1; j < n; j++) {
        void * value = arr[j];
        int i = j - 1;
        while (i >= 0 && cmp(arr[i], value) > 0) {
            arr[i + 1] = arr[i];
            i--;
        }
        arr[i + 1] = value;
    }
}

上述算法对数组arr进行插入排序,并且通过函数指针cmp调用fncmp函数进行比较两个数值的大小。
上述算法还可以扩展到字符串的排序,只要实现将函数fncmp进行改变即,无需将insertSortByPointers函数进行改变。这样就提高了程序的灵活性。
该算法的最好情况是O(n),平均情况是O(n^2),最坏情况是O(n^2)。
相关阅读 更多 +
排行榜 更多 +
我狙击打的贼准

我狙击打的贼准

飞行射击 下载
枪战突击

枪战突击

飞行射击 下载
其乐无穷

其乐无穷

飞行射击 下载