目录
一、冒泡排序的思想二、冒泡排序的3种方法2.1第一种以10个数为例2.2 第二种在第一种的情况下进行优化升级2.3第三种qsort 函数进行冒泡排序
一、冒泡排序的思想
两两相邻的元素进行比较,并且有可能的话需要交换
二、冒泡排序的3种方法
2.1第一种以10个数为例
升序
#include<stdio.h>int main(){int arr[10] = { 0 };int m = 0;for (m = 0; m < 10; m++){scanf("%d", &arr[m]);//输入10个数放进数组里面去}for (m = 1; m < =10; m++)//冒泡排序进行的趟数{int j = 0;for (j = 0; j < 10-m; j++)//一趟冒泡排序要进行多少对元素的比较{int temp = 0;if (arr[j] > arr[j + 1]){temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}}for (m = 0; m < 10; m++)//打印冒泡排序排序好之后的数组{printf("%d ", arr[m]);}return 0;}
运行结果:
2.2 第二种在第一种的情况下进行优化升级
升序
#include<stdio.h>int main(){int arr[10] = { 0 };int sz = 0;sz = sizeof(arr) / sizeof(arr[10]);//表示数组的元素个数int m = 0;for (m = 0; m < sz; m++){scanf("%d", &arr[m]);}for (m = 1; m <=sz; m++)//冒泡排序进行的趟数{int j = 0;int flag = 1;//假设待排序的数组中的元素已经有序for (j = 0; j < sz-m; j++)//对未排序元素进⾏冒泡排序{int temp = 0;if (arr[j] > arr[j + 1]){flag = 0;//只要交换说明正在排序的数据不是有序的temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}if (flag == 1)//当前序列已经是升序状态,结束循环{break;}}for (m = 0; m < sz; m++){printf("%d ", arr[m]);}return 0;}
运行结果:
2.3第三种qsort 函数进行冒泡排序
qsort() 函数的声明:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
参数:
base – 指向要排序的数组的第一个元素的指针。
nitems – 由 base 指向的数组中元素的个数。
size – 数组中每个元素的大小,以字节为单位。
compar – 用来比较两个元素的函数。
头文件:stdlib.h
#include<stdio.h>#include<stdlib.h>int cmp_int(const void* e1, const void* e2){return *(int*)e1 - *(int*)e2;}int main(){int arr[10] = { 0 };int sz = 0;sz = sizeof(arr) / sizeof(arr[10]);//表示数组的元素个数int m = 0;for (m = 0; m < sz; m++){scanf("%d", &arr[m]);}qsort(arr,sz,4, cmp_int);for (m = 0; m < sz; m++){printf("%d ", arr[m]);}return 0;}
运行结果:
如果这个想让他降序排序可以将下面这行代码中的两个交换位置:
欧耶!!!!我学会啦!!!!!