氣泡排序(相鄰比較):
比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
選擇排序(找最小):
首先在待排序序列中找到最小元素,存放到序列的起始位置
再從剩餘未排序元素中繼續尋找最小元素,放到已排序序列的末尾
以此類推,直到所有元素均排序完畢。
插入排序(從第乙個開始排,已排序部分123 未排序部分5896):
從第乙個元素開始,該元素可以認為已經被排序
取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
如果該元素(已排序)大於新元素,將該元素移到下一位置
重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置後
重複步驟2~5
快速排序(挑選乙個元素,分左右兩個區域,大於該元素的放右邊,小於該元素的放左邊):
從數列中挑出乙個元素,稱為「基準」(pivot),通常選擇第乙個或最後乙個元素。
掃瞄數列,以基準元素為比較物件,把數列分成兩個區,小於基準元素的移動到基準元素前面,大的移到後面,相等的前後都可以。分割槽完成之後,基準元素就處於數列的中間位置。
再用同樣的方法,遞迴地排序劃分的兩個區。
在分割槽過程中,為了不使用額外的空間,左右同時掃瞄基準之外的元素,在得到乙個左邊大於基準,右邊小於基準的時候,把他們兩個進行交換。
二分查詢(找出中間位置,給定乙個值與中間值比較,該值大於中間值就取右邊,否則取左邊):
假設我們的陣列是乙個遞增的陣列,首先我們需要找到陣列的中間位置.
一。要知道中間位置就需要知道起始位置和結束位置,然後取出中間位置的值來和我們的值做對比。
二。如果中間值大於我們的給定值,說明我們的值在中間位置之前,此時需要再次二分,因為在中間之前,所以我們需要變的值是結束位置的值,此時結束位置的值應該是我們此時的中間位置。
三。反之,如果中間值小於我們給定的值,那麼說明給定值在中間位置之後,此時需要再次將後一部分的值進行二分,因為在中間值之後,所以我們需要改變的值是開始位置的值,此時開始位置的值應該是我們此時的中間位置,直到我們找到指定值。
四。或者中間值等於最初的起始位置,或結束位置(此時說明給定值未找到),下面我們來用**實現~
氣泡排序 選擇排序 插入排序 快速排序
include 氣泡排序,思想 從最末位開始 往前一位一位比較,比前一位小的話,就交換位置 兩個for,第乙個for迴圈用於記錄已排序的位置,第二個for迴圈用於已排序位置到結束位置之間的氣泡排序 void popsort int p int n 選擇排序,由前往後選擇最小的數。一輪比較完後,將最小...
氣泡排序 選擇排序 插入排序 快速排序
氣泡排序 元素兩兩比較,大的往後放,經過一輪比較後,那麼最大的元素就會出現在最後面。public static void main string args for int j 0 j arr i 1 system.out.println arrays.tostring arr 每次拿乙個元素,跟他後...
氣泡排序 選擇排序 快速排序 插入排序
排序只對一維資料有意義.兩層迴圈,第一層是遍歷每乙個元素.第二層迴圈,讓兩兩之間進行比較交換.時間複雜度 o n 2 空間複雜度 o 1 穩定性 穩定的 def buble sort arr for i in range len arr 1 for j in range len arr i 1 if...