前三篇都是插入排序,隨後的氣泡排序和快速排序是交換排序
氣泡排序有兩種,1、每次把最大數放到末尾;2、每次把最小的放在行首。其實都是一樣的。本文是每次找最大值,放在末尾。
找最大值,往末尾放,則必須從行首開始遍歷,先拿第乙個數跟第二個比較,a[1]>a[2],兩者交換,然後a[2]和a[3]比較,a[2]>a[3],則交換。大數後移,以此類推。如果a[1] < a[2],則無需交換,直接拿a[2]和a[3]比較。也就是相鄰的兩兩比較,大的後移。
找最小值一樣,不過是從後往前遍歷而已。通常會設一變數,記錄是否有元素進行交換,如果沒有,則說明元素有序,退出程式。
氣泡排序還有一種,它不是相鄰的兩兩交換,而是用乙個變數存最大值,並記錄最大值的座標,遍歷結束後,將最大值和最後乙個交換。
1、sort.h
#pragma once
typedef struct nodedatatype;
typedef struct datalist;
class sort
;2、sort.cpp
void insertsort::bubblesort( datalist &l )
}if (!isswap)
}}
分析:
氣泡排序比較次數最好的情況是o(n),只遍歷一次。最差是o(n^2),移動次數最好是0,不移動。最差是o(n^2)。
在程式中,我們只是在小於的時候才交換,等於並不交換,這保證排序的穩定性。
排序演算法四 交換排序之氣泡排序
在我的博文 主宰世界 的10種演算法短評 中給出的首個演算法就是高效的排序演算法。本文將對排序演算法做乙個全面的梳理,從最簡單的 冒泡 到高效的堆排序等。排序 將一組雜亂無章的資料按一定的規律順次排列起來。資料表 data list 它是待排序資料物件的有限集合。排序碼 key 通常資料物件有多個屬...
排序演算法 交換排序之冒泡
一 主要思想 顧名思義,交換排序的主要操作是交換,其主要思想是在待排序列中選兩個記錄,將它們的關鍵碼相比較,如果反序 即排列順序與排序後的次序正好相反 則交換它們的儲存位置。二 需要解決的關鍵問題 1 在一趟起泡排序中,若有多個紀錄位於最終位,應如何記載 解決方法 設定變數 exchange 記載記...
排序 交換排序之氣泡排序
在排序演算法中還有一大類是交換類排序,其中最為常見,最好理解的便是氣泡排序了。氣泡排序的演算法思想 通過無序區中相鄰記錄關鍵字的比較和位置的交換,使得關鍵字最小 最大 的記錄如冒泡一般上浮,至水面 有序區 整個演算法從最下面的記錄開始,對每兩個相鄰的記錄的值進行比較,使關鍵字較小的交換至較大的記錄之...