外贸公司的网站建设模板,wordpress 字符集 404,钟表 东莞网站建设,中国十大网站有哪些首先#xff0c;要理解什么是冒泡排序#xff0c;冒泡排序首先就是把无序的一组数#xff0c;转化成为有序的#xff0c;像冒泡一样#xff0c;把排序好的数#xff0c;一点点的冒出来#xff0c;比如如下代码
void buffle_sort(int* arr,int sz){//i代表了需要冒泡排序…首先要理解什么是冒泡排序冒泡排序首先就是把无序的一组数转化成为有序的像冒泡一样把排序好的数一点点的冒出来比如如下代码
void buffle_sort(int* arr,int sz){//i代表了需要冒泡排序的趟数for(int i0;isz-1;i){//j代表了需要比较的两两元素//从小到大的顺序for(int j0;jsz-1-i;j){if(arr[j]arr[j1]){int temparr[j];arr[j]arr[j1];arr[j1]temp;}}}
}
int main(){int arr[]{2,3,5,6,8,9,0,4,1,7};int szsizeof(arr)/sizeof(arr[0]);bubble_sort(arr,sz);
}冒泡排序有点局限性在这里只能排序整形的数组那如果我想使用结构体排序呢或者我使用float类型进行排序呢这里的冒泡排序就要重写。 为了更加的方便使用库函数qsort进行排序
//void qsort (void* base, 这里是函数的首地址
// size_t num, 表示的是需要排序的个数
// size_t size,表示的需要排序的元素的字节数
// int (*compar)(const void*,const void*));
// 表示两个元素需要怎么去比较下面对qsort进行使用
#includestdlib.h
struct stu{char name[20],int age;
}
int cmp_int(const void* e1,const void* e2){//从小到大的顺序排序//此时如果需要从大到小把e1和e2的变换一下就行return *(int*)e1-*(int*)e2;
}
int cmp_by_name(const void* e1,const void* e2){return strcmp(((struct stu*)e1)-name,((struct stu*)e2)-name);
}
int cmp_by_age(const void* e1,const void* e2){return ((struct stu*)e1)-age-((struct stu*)-age);
}
void test1(){int arr[]{2,3,5,6,8,9,0,4,1,7};int szsizeof(arr)/sizeof(arr[0]);qsort(arr,sz,sizeof(arr),cmp_int)
}
void test2(){struct stu s[3]{{zhangsan,30},{lisi,15},{wangwu,50}};int szsizeof(s)/sizeof(s[0]);//qsort(s,sz,sizeof(s[0]),cmp_by_name);qsort(s,sz,sizeof(s[0],cmp_by_age);
}
int main(){test1();test2();
}由于冒泡排序使用的话要规定类型所以使用冒泡排序的思想模拟实现qsort函数但是我们要知道qsort的底层逻辑是用快速排序实现的。 下面看这一段代码
struct stu{char name[20];int age;
};
int cmp_by_name(const void* e1,const void* e2){return strcmp(((struct stu*)e1)-name,((struct stu*)e2)-name);
}
void swap(char* buf1,char* buf2,int width){for(int i0;iwidth;i){char temp*buf1;*buf1*buf2;*buf2temp;buf1;buf2;}
}
void bubble_sort2(void* base,int sz,int width,int(*cmp)(const void* e1,const void*e2)){for(int i0;isz-1;i){for(int j0;jsz-1-i;j){if(cmp((char*)basej*width,(char*)base(j1)*width)0){swap((char*)basej*width,(char*)base(j1)*width,width);}}}
}
void test(){struct stu s[3]{{zhangsan,50},{wangwu,20},{lisi,30}};int szsizeof(s)/sizeof(s[0]);bubble_sort2(s,sz,sizeof(s[0]),cmp_by_name);}
int main(){test();return 0;
}这是代码的实现看到这别忘了点个赞哦