經典排序演算法 氣泡排序(C語言實現)

2021-09-23 17:06:35 字數 1196 閱讀 7292

氣泡排序是一種較為簡單的排序演算法,其基本思想為從頭開始依次比較相鄰的兩個元素大小,將較大(較小)的元素移至右端,最終使最大(最小)的元素移至序列最後,再次重複上述過程,直到最終序列完全有序為止。

例如:有一行數分別是26、10,83,56,28,66,7

說明:按照從小到大的順序進行排序,方框數為比較的次數,以下圖示為比較完交換的結果。

(1)第一躺排序:

此時已將此行數中最大的那個數字放在末尾。

(2)第二躺排序:

此時將倒數第二大的數字放在後面。

(3)第三趟排序:

此時將倒數第三大的數字放在後面。

以此類推,可以得到最終結果為:7、10、26、28、56、66、83。

備註:n個數要比較n - 1趟,第一躺比較n - 1次,第 j 趟需要比較n - j 次。

在分析完上述過程之後,下面給出具體的**實現:

void bubble_sort(int *arr,int len)              //其中len是陣列的長度}}

}

以上**是在給出任意乙個無序的序列基礎上進行排序。計算的出其時間複雜度為o(n^2)。那如果給出的序列自身本身就有序呢?通過對以上**的分析發現,如果序列自身有序的話,則只需要對序列進行一趟遍歷,此時的序列就是有序的。至於後面的比較完全就是效率上的浪費。對此,對上述**進行優化。

void butter_sort2(int *arr,int len)

}if(!swap) //當一次躺比較沒有一次進入第乙個if語句時,才會}}

此時計算在序列自身有序的基礎上其時間複雜度為o(n)。

總的來說冒泡演算法是一種較為簡單的排序演算法。在有序情況下其時間複雜度為o(n^2),在無序情況下其時間複雜度為o(n)。由於演算法中借助了temp進行交換,因此其空間複雜度為o(1)。氣泡排序演算法是一種穩定的排序演算法。

排序演算法 氣泡排序 C語言實現

氣泡排序介紹 氣泡排序 bubble sort 又稱為氣泡排序。這是一種較簡單的排序演算法。它會遍歷若干次要排序的陣列,每次遍歷時,它都會從前往後依次比較相鄰兩個數的大小 如果前者大於後者,則兩者位置互換。由此,一次遍歷後,最大元素就在數列末尾。採用相同方法再次遍歷時,第二大的元素就被排列在最大元素...

氣泡排序演算法C語言實現

氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在...

經典排序演算法 堆排序(C語言實現)

堆排序的基本原理為將待排序序列構造成乙個大根堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1個元素重新構造成乙個大根堆,重複上述操作,最終序列為有序。備註 大根堆是每個結點的值都大於或等於其左右孩子結點的值 小根堆是每個結點的值都小於或等於其左...