vlambda博客
学习文章列表

算法实例:图示冒泡排序算法


算法实例:图示冒泡排序算法

美国学者埃德加.戴尔(Edgar Dale)1946年提出了“学习金字塔”的理论。将学习方式分为7种,分别听讲、阅读、视听结合、演示、讨论、实践、分享。前四种属于被动学习,学习内容的平均留存率较低,而后三种属于主动学习,学习内容的平均留存率更高。传统的听讲、阅读学习内容平均留存率只有5%,10%。而通过分享的方式教授给他人,学习的平均留存率可以达到90%。一起学习,共同进步!


算法实例:图示冒泡排序算法
老猫coder
不教你做一个古板的程序猿,教你做个有趣的coder。
15篇原创内容
Official Account



算法实例:图示冒泡排序算法


今天来学习算法部分,先从排序算法开始



什么是冒泡排序


相邻位置的元素顺序比较大小,按照排序规则决定是否进行交换。


这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。




图解冒泡排序


通俗化过程:你可以在脑海中想想有这样一串气泡。最底下的位置为0,我们按照从大到小进行排序,大的往下沉,小的往上升,因为这样比较符合物理规律一点。

算法实例:图示冒泡排序算法


好,开始,


第一轮:一个12的气泡遇到一个5的气泡,由于5比12小所以不需要交换,然后一个5的气泡看到一个23的气泡。23的气泡太大了,只能往下走,那就是5和23交换位置没然后是5和1比较,1比较小,不需要交换,然后1和43交换,再1和56交换。一轮之后1就到最上面了。这一轮共进行了5次比较


算法实例:图示冒泡排序算法


第二轮:接下来,就开始排剩余的5个元素。接下来12和23比较,交换,12再与5比较不交换。5跟43比较交换,5跟56比较交换。经过这一轮5排到了次上面的位置。这一轮共进行了4次比较。


。。。。。。。


以此类推,总共进行了5轮,每轮分别进行了5次,4次,3次,2次,1次比较,为甚么要说这个呢?这就是两层for循环的逻辑所在。



show your code


C语言代码:

#include<stdio.h>#include<stdlib.h> void BubbleSort(int a[], int len){ int i, j, temp; for (j = 0; j < len - 1; j++) { for (i = 0; i < len - 1 - j; i++) if (a[i] > a[i + 1]) { temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp; } }} int main(){ int arr[] = { 12, 5, 23, 1, 43, 56 }; int len = sizeof(arr) / sizeof(arr[0]); int i = 0; printf("排序前:"); for (i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n");  BubbleSort(arr, len); printf("排序后:"); for (i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); system("pause"); return 0;}


算法实例:图示冒泡排序算法
特别说明