排序:冒泡排序
2013-02-25 21:25 gitenius 阅读(302) 评论(0) 编辑 收藏 举报冒泡排序的基本概念:依次比较相邻的两个数,将小数放在前面,大数放在后面。
一:时间复杂度
第一趟:比较第1个和第2个数,将小数放前,大数放后面
比较第2个和第3个数,…
比较第3个和第4个数,…
…
比较第n-1个和第n个数,…
共比较n-1次
第二趟:比较第1个和第2个数,将小数放前,大数放后面
比较第2个和第3个数,…
比较第3个和第4个数,…
…
比较第n-2个和第n-1个数
共比较n-2次
...
第M趟:比较第1个和第2个数,将小数放前,大数放后面
比较第2个和第3个数,…
比较第3个和第4个数,…
…
比较第n-M个和第n-M+1个数
共比较n-M次
...
在最好(正序)的情况下:冒泡排序进行一趟排序,总比较次数n-1;
在最坏(逆序)的情况下:n个数排序后,共需比较(n-1)+(n-2)+…+(n-M)+…+1=n(n-1)/2次
因此,冒泡排序总的时间复杂度:O(n*n)
二:算法稳定性
冒泡排序是具有稳定性的算法,即原序列中相同元素的相对顺序仍然保持到排序后的序列。
原序列:
05 33 08 1020
55 89 61 80 9820
26
排序中:
05 08 1020
33 55 61 80 8920
26 98
05 08 1020
33 55 61 8020
26 89 98
05 08 1020
33 55 6120
26 80 89 98
05 08 1020
33 5520
26 61 80 89 98
05 08 1020
3320
26 55 61 80 89 98
05 08 102020
26 33 55 61 80 89 98
05 08 102020
26 33 55 61 80 89 98
05 08 102020
26 33 55 61 80 89 98
05 08 102020
26 33 55 61 80 89 98
05 08 102020
26 33 55 61 80 89 98
05 08 102020
26 33 55 61 80 89 98
排序后:
05 08 102020
26 33 55 61 80 89 98
以上所示是:排序前后20
,20
的相对顺序保持不变。
三:示例代码
冒泡排序的相关代码:
1: public class BubbleSortLib
2: {
3: public int[] Sort(int[] arr)
4: {
5: for (int outer = arr.Length - 1; outer > 0; outer--)
6: {
7: for (int inner = 0; inner < outer; inner++)
8: {
9: if (arr[inner] > arr[inner + 1])
10: {
11: int temp = arr[inner];
12: arr[inner] = arr[inner + 1];
13: arr[inner + 1] = temp;
14: }
15: }
16: }
17: return arr;
18: }