冒泡排序法的原理:
重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)错误就把他们交换过来,走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
例如 {2,1,4,5,7,3,6}
经过第一次走访,变为{1,2,4,5,3,6,7}
经过第二次,变为{1,2,4,5,3,6,7}
经过第三次,变成{1,2,4,3,5,6,7}
........
经过6次,排序完成
代码实现:
#include <stdio.h> int main() { int arr[10] = { 1,3,5,7,9,2,4,6,8,10 }; int sz = sizeof(arr) / sizeof(arr[0]); int k = 0; for (k = 0; k < sz - 1; ++k) { int i = 0; for (i = 0; i < sz-1; ++i) { if (arr[i] > arr[i + 1]) { int temp = arr[i + 1]; arr[i + 1] = arr[i]; arr[i] = temp; } } } int j = 0; for (j = 0; j < sz; ++j) { printf("%d ", arr[j]); } return 0; }
运行结果:
代码分析:
#include <stdio.h> int main() { int arr[10] = {1,3,5,7,9,2,4,6,8,10}; //创建一个整形数组 int sz = sizeof(arr) / sizeof(arr[0]); //计算数组的大小 int k = 0; //用k变量来控制所需走访的次数 for (k = 0; k < sz-1; ++k)// 走访次数应为数组元素个数减一 { int i = 0;// i变量来控制数组内部不符合顺序元素的交换 for (i = 0; i < sz-1; ++i) { if (arr[i] > arr[i + 1]) { int temp = arr[i + 1]; //用temp来当中间变量来交换相邻两个元素 arr[i + 1] = arr[i]; arr[i] = temp; } } } int j = 0; for (j = 0; j < sz; ++j) //输出打印该数组 { printf("%d ", arr[j]); } return 0; }
函数实现代码:
void boild(int arr[10], int sz) { int k = 0; for (k = 0; k < sz - 1; ++k) { int i = 0; for (i = 0; i < sz - 1; ++i) { if (arr[i] > arr[i + 1]) { int temp = arr[i + 1]; arr[i + 1] = arr[i]; arr[i] = temp; } } } } #include <stdio.h> int main() { int arr[10] = {1,3,5,7,9,2,4,6,8,11}; int sz = sizeof(arr) / sizeof(arr[0]); boild(arr, sz); int j = 0; for (j = 0; j < sz; ++j) { printf("%d ", arr[j]); } return 0; }
运行结果: