普通冒泡排序法与通用冒泡排序法(C语言)

来源:互联网 发布:skype for ubuntu 14 编辑:程序博客网 时间:2024/06/06 03:30

一、普通冒泡排序法


#include<stdio.h>#include<Windows.h>#include<stdlib.h>#include<string.h>void bubble_sort(int arr[],int sz){int i = 0;int j = 0;for(i=0;i<sz-1;i++){for(j=0;j<sz-1-i;j++){if(arr[j] > arr[j+1]){int tmp = arr[j];arr[j] = arr[j+1];arr[j+1] = tmp;}}}}int main(){int arr[] = {1,3,5,7,9,2,4,6,8,0};int sz = sizeof(arr)/sizeof(arr[0]);int i = 0;bubble_sort(arr,sz);for(i=0;i<sz;i++){printf("%d   ",arr[i]);}system("pause");return 0;}
程序运行结果:





二、通用冒泡排序法

    1、测试普通数组排序


#include<stdio.h>#include<Windows.h>#include<stdlib.h>#include<string.h>typedef struct S{char name[20];int age;}S;//按名字排序int cmp_by_name(const void *e1,const void *e2){return strcmp(((S*)e1)->name,((S*)e2)->name);}//按年龄排序int cmp_by_age(const void *e1,const void *e2){return ((S*)e1)->age - ((S*)e2)->age;}void _Swap(char*buf1,char*buf2,int sz){int i = 0;for(i=0;i<sz;i++){char tem = *buf1;*buf1 = *buf2;*buf2 = tem;buf1++;buf2++;}}int cmp_int (const void *e1,const void *e2){return *(int*)e1 - *(int*)e2;}//通用冒泡排序void bubble_sort(void*base,int sz,int width,int(*cmp)(const void*e1,const void*e2)){int i = 0;int j = 0;for(i=0;i<sz-1;i++){for(j=0;j<sz-1-i;j++){if(cmp((char*)base+j*width,(char*)base+(j+1)*width)>0){_Swap((char*)base+j*width,(char*)base+(j+1)*width,width);}}}}int main(){int arr[] = {1,3,5,7,9,2,4,6,8,0};/*S arr[] = {{"zhangsan",20},{"lisi",5},{"wangwu",36}};*/int sz = sizeof(arr)/sizeof(arr[0]);int i = 0;bubble_sort(arr,sz,sizeof(arr[0]),cmp_int);for(i=0;i<sz;i++){printf("%d   ",arr[i]);/*printf("%s   ",arr[i].name);*/}system("pause");return 0;}
程序运行结果:




2、测试按结构体名字排序

       main程序如下所示,其余部分与测试普通数组排序的程序保持一致。


int main(){/*int arr[] = {1,3,5,7,9,2,4,6,8,0};*/S arr[] = {{"zhangsan",20},{"lisi",5},{"wangwu",36}};int sz = sizeof(arr)/sizeof(arr[0]);int i = 0;bubble_sort(arr,sz,sizeof(arr[0]),cmp_by_name);for(i=0;i<sz;i++){/*printf("%d   ",arr[i]);*/printf("%s   ",arr[i].name);}system("pause");return 0;}
     程序运行结果如下所示:




3、测试按结构体年龄排序

    main程序如下所示,其余部分与测试普通数组排序的程序保持一致。


int main(){/*int arr[] = {1,3,5,7,9,2,4,6,8,0};*/S arr[] = {{"zhangsan",20},{"lisi",5},{"wangwu",36}};int sz = sizeof(arr)/sizeof(arr[0]);int i = 0;bubble_sort(arr,sz,sizeof(arr[0]),cmp_by_age);for(i=0;i<sz;i++){/*printf("%d   ",arr[i]);*/printf("%s   ",arr[i].name);}system("pause");return 0;}

程序运行结果如下所示: