基础十大排序(1)———冒泡排序(c语言版本)
冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法。它适合较少数据的排序运算,效率较低,但是是每个编程学习者入门必须掌握的算法。
-
什么是冒泡排序
冒泡排序是一种交换排序,它的基本思想是将相邻的两个数据进行比较,如果反序则进行交换,直到没有反序记录时结束这个数,再到下一个数,直到所有数据排好顺序。因一个个浮出故称之为冒泡排序。双重循环时间O(n^2) -
算法描述(正序)
• 比较相邻两个数,如果第一个数比第二个数大,则两数交换。
• 对之后的相邻元素进行同样的工作,从开始到最后一对,这样进行一次排序后,数据的最后一位会是最大值,第一次循环进行的次数为n-1。
• 之后对所有元素重复以上步骤,且以后每次循环次数为n-1-i。(n为数据个数,i为循环次数)
• 重复以上步骤,直到排序完成为止。 -
代码实现
#include<stdio.h>
int main() {
int a[10];
int i, j, n, m;
for (i = 0;i < 10;i++)
scanf_s("%d", &a[i]);
n = 1;//哨卡数
m = 0;
for (i = 0;i < 10 && n!=0;i++) {
n = 0;
for (j = 9;j >= i;j--)
if (a[j] <= a[j - 1]) {
m = a[j];
a[j] = a[j - 1];
a[j - 1] = m;
n++;
}
}
for (i = 0;i < 10;i++)
printf_s("%d\n", a[i]);
return 0;
}
- 动态描述
- 冒泡排序复杂度分析
分析一下它的时间复杂度。当数据已经正序排好时,那么可以判断出就是n-1次的比较,没有数据交换,此时时间复杂度为O(n)。当待排序是逆序的情况,此时需要比较 ∑ i = 2 n i − 1 \displaystyle\sum_{i=2}^{n} i-1 i=2∑ni−1=1+2+3+…+(n-1)= n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n−1) 次,此时时间复杂度为 O( n 2 n^2 n2) 。平均时间复杂度为O( n 2 n^2 n2)。
文章有错的话欢迎指正,第一次写博客难免语言会有不通顺或者漏洞,各位看官多多包涵。大家相互交流,祝大家新年快乐。