冒泡排序
一、算法原理
冒泡排序是一种常用的排序算法,属于稳定排序法,其时间复杂度为O(n^2)。
冒泡排序法的原理就是从前向后依次比较相邻两个元素的大小,大元素后沉,类似于水中的泡泡逐步上浮的过程,随着泡泡逐渐接近水面,水中压强逐渐减小,水泡体积逐渐增大,因此成为冒泡排序。
冒泡排序法包括多趟排序过程,每一趟排序都是从数组的第一个元素开始,以步长为1的增量依次对相邻的两个元素进行比较大小,反序的话则交换此二元素。
Demo:
假设有数据如下表所示:数组记为data![]()
第一趟排序:
从下标为1的元素开始,向后依次比较相邻元素大小。首先比较data[1]和data[2],此时data[1] < data[2],因此不用交换元素。

之后比较data[2]和data[3]的大小,此时数据反序,需要交换

第二趟排序:
和第一趟排序一样,仍旧从数组的第一个元素开始向后依次进行比较大小。但是由于经过第一趟排序之后,最大的元素已经到了最后的位置,因此第二趟排序就截止到数组的倒数第二个位置。

至此,该数组的冒泡排序结束。从上述演示过程可以看出,具有n个元素的数组使用冒泡排序法进行排序,需要进行n-1趟排序,每一趟排序都冒出剩余元素中的最大值,放到剩余元素的末尾。
二、冒泡排序算法流程图

三、冒泡排序算法之C程序
1 #include<stdio.h> 2 3 4 int a[15030]; 5 int main() { 6 int n; 7 scanf("%d", &n); 8 9 for (int i = 0; i < n; i ++) scanf("%d", &a[i]); 10 11 //冒泡排序 12 13 for (int i = 1; i <= n - 1; i ++) { //循环次数 14 for (int j = 0; j < n - i; j ++) { //内层循环 15 if (a[j] > a[j + 1]) { //判断是否需要交换 16 //有没有发现这跟第一次作业的交换a, b很像 17 int t; 18 t = a[j]; 19 a[j] = a[j + 1]; 20 a[j + 1] = t; 21 } 22 } 23 } 24 25 for (int i = 0; i < n; i ++) printf("%d ", a[i]); 26 27 return 0; 28 }
没有什么能阻止我对知识的追求!!!

浙公网安备 33010602011771号