📜  DAA-冒泡排序

📅  最后修改于: 2021-01-12 03:39:08             🧑  作者: Mango


冒泡排序是一种基本排序算法,必要时可通过重复交换相邻元素来工作。如果不需要交换,则对文件进行排序。

这是所有排序算法中最简单的技术。

Algorithm: Sequential-Bubble-Sort (A) 
fori← 1 to length [A] do 
for j ← length [A] down-to i +1 do 
   if A[A] < A[j - 1] then 
      Exchange A[j] ↔ A[j-1] 

实作

voidbubbleSort(int numbers[], intarray_size) { 
   inti, j, temp; 
   for (i = (array_size - 1); i >= 0; i--) 
   for (j = 1; j <= i; j++) 
      if (numbers[j - 1] > numbers[j]) { 
         temp = numbers[j-1]; 
         numbers[j - 1] = numbers[j]; 
         numbers[j] = temp; 
      } 
} 

分析

在这里,比较次数是

1 + 2 + 3 + … +( n -1)= n ( n -1)/ 2 = O( n 2 )

显然,该图显示了气泡排序的n 2性质。

在该算法中,比较次数与数据集无关,即所提供的输入元素是按排序顺序还是反向顺序还是随机的。

记忆需求

根据上述算法,很明显气泡排序不需要额外的内存。

Unsorted list:

5 2 1 4 3 7 6

一次迭代:

5 > 2 swap

2 5 1 4 3 7 6

5 > 1 swap

2 1 5 4 3 7 6

5 > 4 swap

2 1 4 5 3 7 6

5 > 3 swap

2 1 4 3 5 7 6

5 < 7 no swap

2 1 4 3 5 7 6

7 > 6 swap

2 1 4 3 5 6 7

第二次迭代:

2 > 1 swap

1 2 4 3 5 6 7

2 < 4 no swap

1 2 4 3 5 6 7

4 > 3 swap

1 2 3 4 5 6 7

4 < 5 no swap

1 2 3 4 5 6 7

5 < 6 no swap

1 2 3 4 5 6 7

有一个在3,45和6迭代没有发生变化。

最后,

the sorted list is

1 2 3 4 5 6 7