您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
c语言实现像素点冒泡排序详解
发布时间:2021-04-21 21:37:10编辑:雪饮阅读()
冒泡排序
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。
过程演示:
这个演示图是借用菜鸟教程的,其实菜鸟教程这里这个演示图并不是多么可观的。
如果非要理解这个图。
你可以先看看下面这个
思路分析:
1.第一轮排序:22的位置被固定
7和3比较,若逆序则交换位置。因为7>3两数是逆序的,所以交换位置:7,3, 22,15,8 3,7, 22,15,8
7和22比较,若逆序则交换位置。因为7<22两数是顺序的,所以不交换位置:3, 7, 22, 15,8 3, 7, 22, 15,8
22和15比较,若逆序则交换位置。因为22>15两数是逆序的,所以交换位置:3,7, 22,15, 8 3,7, 15,22, 8
22和8比较,若逆序则交换位置。因为22>8两数是逆序的,所以交换位置:3,7, 15, 22,8 3,7, 15, 8,22
第一轮排序后的结果:【22的位置被固定】3,7, 15, 8,22
2.第二轮排序:15的位置被固定
3和7比较若逆序则交换位置。因为3<7两数是顺序的,所以不交换位置:3,7, 15, 8,22 3,7, 15, 8,22
7和15比较若逆序则交换位置。因为7<15两数是顺序的,所以不交换位置:3, 7, 15, 8,22 3, 7, 15, 8,22
15和8比较若逆序则交换位置。因为15>8两数是逆序的,所以交换位置:3, 7, 15, 8,22 3, 7, 8, 15,22
第二轮排序后的结果:【15的位置被固定】3, 7, 8, 15, 22
3.第三轮排序:8的位置被固定
3和7比较若逆序则交换位置。因为3<7两数是顺序的,所以不交换位置:3,7, 8, 15,22 3,7, 8, 15,22
7和8比较若逆序则交换位置。因为7<8两数是顺序的,所以不交换位置:3, 7, 8, 15,22 3, 7, 8, 15,22
第三轮排序后的结果:【8的位置被固定】:3, 7, 8,15, 22
4.第四轮排序:7的位置被固定
3和7比较若逆序则交换位置。因为3<7两数是顺序的,所以不交换位置:3,7, 8,15,22 3,7, 8,15,22
第四轮排序后的结果:【7的位置被固定】:3, 7, 8,15, 22
排序到此结束
那么现在回来再看上面像素点的排序演示,你可以把这些一个个的像素点看做是一个个的竖线,那么这些竖线就相当于刚才的第二个排序的柱状统计图一样。像素点可以看做是宽度为0的一个个柱子。
将像素点看做是竖线看做是宽度为0的柱子,这点是借鉴于mrp虚拟机群里的服务员的思路,其实一开始我也是没有想明白,自己胡乱理解了几个思路感觉都不是很对。
那么最后再来一波c语言实现冒泡排序的实例:
#include <stdio.h>
void bubble_sort(int arr[], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int main() {
int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
int len = (int) sizeof(arr) / sizeof(*arr);
bubble_sort(arr, len);
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
return 0;
}
关键字词:c语言,冒泡排序,像素点
下一篇:c语言实现选择排序算法