冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法,冒泡排序的特点是调整相邻的两个对象的位置,每进行一次内循环,就可以将最大值调整到最后,这样下次就不需要考虑它了,冒泡排序的时间复杂度为O(N^2),虽然时间上不占有优势,但是冒泡排序的代码简单,实现难度低。

实例分析:

以数组 arr = [5, 1, 4, 2, 8] 为例说明,加粗的数字表示每次循环要比较的两个数字:

第一次外循环

( 5 1 4 2 8 ) → ( 1 5 4 2 8 ), 5 > 1 交换位置
( 1 5 4 2 8 ) → ( 1 4 5 2 8 ), 5 > 4 交换位置
( 1 4 5 2 8 ) → ( 1 4 2 5 8 ), 5 > 2 交换位置
( 1 4 2 5 8 ) → ( 1 4 2 5 8 ), 5 < 8 位置不变

第二次外循环(除开最后一个元素8,对剩余的序列)

( 1 4 2 5 8 ) → ( 1 4 2 5 8 ), 1 < 4 位置不变
( 1 4 2 5 8 ) → ( 1 2 4 5 8 ), 4 > 2 交换位置
( 1 2 4 5 8 ) → ( 1 2 4 5 8 ), 4 < 5 位置不变

第三次外循环(除开已经排序好的最后两个元素,可以注意到上面的数组其实已经排序完成,但是程序本身并不知道,所以还要进行后续的循环,直到剩余的序列为 1)

( 1 2 4 5 8 ) → ( 1 2 4 5 8 )
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )

第四次外循环(最后一次)
( 1 2 4 5 8 ) → ( 1 2 4 5 8 )

 

 

Python实现:

 1 def bubble_sort(items):
 2     list_len = len(items) - 1
 3     if list_len <= 1:
 4         return items
 5     for index in range (0, list_len):
 6         for sub_index in range (0, list_len - index):
 7             if (items[sub_index] > items[sub_index + 1]):
 8                 items[sub_index], items[sub_index + 1] = items[sub_index + 1], items[sub_index]
 9     return items
10 lists = [10, 11, 3, 4, 8, 12, 6, 7, 1]
11 print('final:', bubble_sort(lists))

C++实现:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 template <typename T>
 5 void my_swap (T &a, T &b) {
 6     T temp = a;
 7     a = b;
 8     b = temp;
 9 }
10 
11 template <typename T>
12 void bubble_sort(T arr[], int len) {
13     for (int i = 0; i < len - 1; ++i) {
14         for (int j = 0; j < len - 1 - i; ++j) {
15             if (arr[j] > arr[j + 1]) {
16                 my_swap(arr[j], arr[j + 1]);
17             }
18         }
19     }
20 }
21 
22 int main() {
23     int arr[] = {1, 0, 3, 56, 32, 2, 3, 100, 35};
24     int len = sizeof(arr) / sizeof(arr[0]);
25     bubble_sort(arr, len);
26     std::cout << "sort over:" << std::endl;
27     for (int i = 0; i < len; ++i) {
28         std::cout << arr[i] << std::endl;
29     }
30 }

 

posted on 2017-11-20 21:29  LyndonYoung  阅读(241)  评论(0)    收藏  举报