改進的氣泡排序演算法

2021-08-27 10:17:15 字數 737 閱讀 2964

氣泡排序演算法,是最基本的排序演算法, 它屬於交換排序。

設想被排序的陣列r[1..n]垂直豎立,將每個資料元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r,凡掃瞄到違反本原則的輕氣泡,就使其向上"漂浮"(交換位置),如此反覆進行,直至最後任何兩個氣泡都是輕者在上,重者在下為止。

若記錄序列的初始狀態為"正序",則氣泡排序過程只需進行一趟排序,在排序過程中只需進行n-1次比較,且不移動記錄;反之,若記錄序列的初始狀態為"逆序",則需進行n(n-1)/2次比較和記錄移動。因此氣泡排序總的時間複雜度為o(n*n)。

根據掃瞄方向不同,實現略有不同。

**如下:

void bubblesort_1(int a, int size)

} }}

如果上面**中,裡面一層迴圈在某次掃瞄中沒有執行交換,則說明此時陣列已經全部有序列,無需再掃瞄了。因此,增加乙個標記,每次發生交換,就標記,如果某次迴圈完沒有標記,則說明已經完成排序。

void bubblesort_2(int a, int size)

} // 如果上一次掃瞄沒有發生交換,則說明陣列已經全部有序,退出迴圈

if (bswaped)

break;

}}

void bubblesort_3(int a, int size)

} }}

排序演算法 氣泡排序(改進)

假如我們運氣好,用了1輪就已經將整個序列排序好了,整個數列已然是有序的了。可是我們的排序演算法仍然 兢兢業業 地繼續執行第2輪 第3輪 直至n 1輪,這就很沒必要。也就是說如果序列已經有序,每一輪排序還是會繼續比較相鄰的元素,這就相當於做了一些沒用的操作。這種情況下,如果我們能判斷出數列已經有序,並...

改進的氣泡排序演算法

氣泡排序演算法,是最基本的排序演算法,它屬於交換排序。設想被排序的陣列r 1.n 垂直豎立,將每個資料元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r,凡掃瞄到違反本原則的輕氣泡,就使其向上 漂浮 交換位置 如此反覆進行,直至最後任何兩個氣泡都是輕者在上,重者在下為止。若記...

排序演算法 氣泡排序的首尾改進

在排序演算法中,氣泡排序是乙個很經典的演算法,最初的氣泡排序一直要執行n 1次,但是其中有些事不必要的操作,例 如,當沒有兩個資料發生交換時,就可以結束執行。本文介紹的一種方法是對上述條件的改進,即不僅對尾資料進行條件判斷,同時還對頭資料進行條件判斷,當頭資料不發生交換時需要完成一些改進,下面給出實...