标签:
冒泡排序算法
一、基本思想:通过无序区间中相邻记录的关键字相互比较和位置交换,使得关键字较小的记录如同气泡般逐渐上浮,以此类推,直至所有记录排序完成。
二、C 语言代码:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 void bubbleSort(RecType R[], int n)
5 {
6 int i;
7 int j;
8 RecType tmp;
9
10 for (i = 0; i < n-1; i++) {
11 for (j = n-1; j > i; j--) {
12
13 //R[j] 与 R[j-1] 进行交换, 将最小关键字记录往前移动
14 if ( R[j].key < R[j-1].key ) {
15 tmp = R[j];
16 R[j] = R[j-1];
17 R[j-1] = tmp;
18 }
19 }
20 }
21 }
三、算法分析
时间复杂度:由算法代码可知,冒泡排序是由两重循环组成,对于 n 个排序记录而言,外层必须经历 n-1 次循环,而内层则必须经历 Σ(n-1-i) 次循环,其中 0 ≦ i ≦ n-1,并且每一次比较如需要交换记录排序位置都必须移动记录三次才能达到目的。故对于冒泡排序而言:
关键字比较和记录移动的最少次数是 (n-1),算法的时间复杂度为 O(n)。
关键字比较和记录移动的最多次数为 (n-1)Σ(n-i-1),其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
关键字平均比较和记录移动次数为 [(n-1)Σ3(n-i-1)],其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
空间复杂度:由算法代码可知,所需的额外空间只有一个 tmp 变量,故冒泡排序算法空间复杂度为 O(1)。
四、思考
冒泡排序算法的思想非常简单,但是效率非常低下,实际工程中应用很少,请问该如何优化冒泡算法?
标签:
原文地址:http://www.cnblogs.com/lishiyun19/p/4319297.html