首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  其它技术  |  算法与数据结构  


选择排序/冒泡排序


原作者:fertiland    源出处:CSDN   发布者:施昌权    发布类型:转载    发布日期:2008-12-01

                                       
#include <stdio.h>
#include <string.h>
typedef int (*COMPAREFUNC)(void* p1, void *p2);
typedef void (*SELECT)(void **a, int len);
int compfunc(void *p1, void *p2);
void select_sort(void **a, int len, COMPAREFUNC compfunc);
void bubble_sort(void **a, int len, COMPAREFUNC compfunc);
void mysort(void **, int, COMPAREFUNC, void (*)(void**,int, COMPAREFUNC));
void print(void **a, int len);

int strcomp(void *p1, void *p2)
...{
    return strcmp((char *)p1, (char *)p2);
}

int intcomp(void *p1, void *p2)
...{
    return  *(int*)p1-*(int*)p2;
}

void select_sort(void **a, int len, COMPAREFUNC compfunc)
...{
    int i = 0;
    int j = 0;
    int k = 0;
    void *ptmp = NULL;

    for (i=0; i < len-1; i++) ...{
        k=i;    /**//*sentimel*/
        for (j=i+1; j< len; j++) ...{
            if ( compfunc(a[k],a[j]) > 0) ...{
                k=j;
            }

        }

        if ( k != i) ...{
            ptmp = a[i];
            a[i] = a[k];
            a[k] = ptmp;
        }

    }

}

void bubble_sort(void **a, int len, COMPAREFUNC compfunc)
...{
    int i = 0;
    int j = 0;
    int k = 0;
    void *ptmp = NULL;

    for (i=0; i < len-1; i++) ...{
        k=0;    /**//*sentimel*/
        for (j=len-1; j>i; j--) ...{
            if ( compfunc(a[j-1],a[j]) > 0) ...{
                ptmp = a[j];
                a[j] = a[j-1];
                a[j-1] = ptmp;
                k = 1;
            }

        }

        if ( k == 0) ...{
            break;        
        }

    }

}


void mysort(void **a, int len, COMPAREFUNC compfunc, void (*method)(void**,int, COMPAREFUNC))...{
    method(a, len, compfunc);
}


void strprint(void **a, int len)
...{
    int i = 0;

    for (i = 0; i < len; i++) ...{
        printf("%s ", (char *)a[i]);
    }

}

void intprint(void **a, int len)
...{
    int i = 0;

    for (i = 0; i < len; i++) ...{
        printf("%d ", *(int *)a[i]);
    }

}


void main(void)
...{
#define N 6
    char *a[N]=...{"bdd", "aaa","ffc","dee","dde", "gf"};
    int c[N]=...{6,1,3,5,4,2};
    int *b[N];
    int i = 0;

    for (i =0;i<N;i++) ...{
        b[i]=&c[i];
    }


    strprint(a, N);
    printf(" ");
    mysort(a, N, strcomp, bubble_sort);
//    mysort(a, N, strcomp, select_sort);
    strprint(a, N);
    printf(" ");
    
    intprint(b, N);
    printf(" ");
    mysort(b, N, intcomp, bubble_sort);
//    mysort(b, N, intcomp, select_sort);
    intprint(b, N);
    printf(" ");
}


关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号