目录
冒泡排序法的原理:
重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)错误就把他们交换过来,走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
例如 {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;
}