标签:sz arr int void 冒泡排序 char 整理 操作 sizeof
1.普通整型数组冒泡排序
核心思想就是需要确定总共需要多少趟(次)冒泡,以及每趟需要比较的对数。
为了避免一开始数组已经排好序,而我们还再进行比较,可以在每趟对数比较之前设计一个标记量flag,如果一趟过后,flag的值未改变,就说明已经排好序了,此时结束循环
#include<stdio.h> void bubble_sort(int arr[], int sz) { int i = 0; //n个元素比较n-1趟; for (i = 0; i < sz - 1; i++) { int flag = 1; //用来标记该组是否有序。 int j; for (j = 0; j < sz - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp; temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; flag = 0; } } if (flag == 1) { break; } } } int main() { int arr[] = { 9,8,7,6,5,4,3,2,1,0 }; int i=0; int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz); for(i=0;i<sz;i++) { printf("%d ",i); } return 0; }普通整形数组冒泡排序
2.库函数qsort实现整型数组冒泡排序
需要注意的是qsort有四个参数,第一个是数组名,第二个是数组元素的个数,第三个是每个元素的大小(字节),第四个函数。
#include<stdio.h> #include<stdlib.h> int cmp_int(const void* e1,const void* e2) { return *(int*)e1-*(int*)e2; //强制转换成int* 型 } int main() { int arr[]={9,8,7,6,5,4,3,2,1}; int sz=sizeof(arr)/sizeof(arr[0]); qsort(arr,sz,sizeof(arr[0]),cmp_int);//注意qsort的四个参数 int i=0; for(i=0;i<sz;i++) { printf("%d ",arr[i]); } return 0; }View Code
3.库函数qsort实现浮点型数组冒泡排序
需要注意强制类型转换的地方
#include<stdio.h> #include<stdlib.h> int cmp_float(const void* e1,const void* e2) { return (int)(*(float*)e1-*(float*)e2); } int main() { float arr[]={9.0,8.0,7.0,6.0,5.0,4.0}; int sz=sizeof(arr)/sizeof(arr[0]); qsort(arr,sz,sizeof(arr[0]),cmp_float); int i=0; for(i=0;i<sz;i++) { printf("%f ",arr[i]); } return 0; }库函数qsort实现浮点型数组冒泡排序
4.库函数qsort实现字符排序
#include<stdio.h> #include<string.h> #include<stdlib.h> int cmp_char(const void* e1,const void* e2) { return *(char*)e1-*(char*)e2;//字符-字符返回的也是整数,所以不用转换成int } int main() { char arr[]={'f','e','d','c','b','a'}; int sz=sizeof(arr)/sizeof(arr[0]); qsort(arr,sz,sizeof(arr[0]),cmp_char); int i=0; for(i=0;i<sz;i++) { printf("%c ",arr[i]); } return 0; }View Code
5.库函数qsort实现结构体变量中的字符串排序
注意字符串之间的比较要用库函数strcmp,引用头文件
include<stdio.h> #include<string.h> #include<stdlib.h> struct stu{ char name[20]; int age; }; int cmp_char(const void* e1,const void* e2) { return strcmp(((struct stu*)e1)->name,((struct stu*)e2)->name);//字符串之间的比较要使用strcmp } int main() { struct stu s[2]={{"zhang san",20},{"li si",18}}; int sz=sizeof(s)/sizeof(s[0]); qsort(s,sz,sizeof(s[0]),cmp_char); int i=0; for(i=0;i<sz;i++) { printf("%s ",s[i].name); } return 0; }View Code
6.自己实现qsort库函数功能对整形数组进行排序
#include<stdio.h> #include<stdlib.h> //整型冒泡排序 void swap(char* buf1, char* buf2, int width) { int i = 0; for (i = 0; i < width; i++) { char temp = *buf1; *buf1 = *buf2; *buf2 = temp; 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)(void* e1, 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,10 }; int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz, sizeof(arr[0]), cmp_int); int i = 0; for (i = 0; i < sz; i++) { printf("%d ", i); } return 0; }View Code
标签:sz,arr,int,void,冒泡排序,char,整理,操作,sizeof 来源: https://www.cnblogs.com/HY1516438233/p/16114101.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。