大學學的演算法已經基本遺忘了,最近又重新撿起來好好鑽研一下,那麼就先從排序開始。
先說交換排序中的氣泡排序,這個是比較基礎的乙個排序演算法。
1、基本思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將他們互換。
這段話什麼意思呢?舉個例子來說說:
比如有乙個陣列:,這是乙個無序的陣列,那麼現在讓它從左到右為從小到大的排列順序,如果採用冒泡思想的話,那麼過程應該是這樣:
先比較3和5,發現3比5小,符合從小到大,那麼就不做交換處理,接著比較5和2,發現5比2大,不符合從小到大,那麼就交換順序,那麼現在順序就是,接著比較5和10,符合從小到大,不作處理,再比較10和1,不符合從小到大,交換順序,現在的順序是,接著比較10和7,不符合從小到大,交換順序,現在的順序是,此時,第一輪排序完畢,由此可發現,最大的乙個數10已經到了最後面,那麼已經符合了我們的要求,所以在下一輪比較中,10就可以不參加了,下一輪比較的數就是,如此反覆幾輪,直到排出最後的順序。那麼就可以發現,每做一次排序就能確定乙個元素的位置,所以不管資料量多大,我們所做的比較次數和進行多少輪比較跟這個陣列裡有多少數有關,所以複雜度應該是o(n2)。氣泡排序是一種穩定的排序演算法。
下面來看一段實現**:
/*
* to change this license header, choose license headers in project properties.
* to change this template file, choose tools | templates
* and open the template in the editor.
*/package algorithm;
/** * 1、基本思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,
* 自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。 即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
* 2、適用場景:氣泡排序是一種穩定的排序方法。 *
* •若檔案初狀為正序,則一趟起泡就可完成排序,排序碼的比較次數為n-1,且沒有記錄移動,時間複雜度是o(n)
* •若檔案初態為逆序,則需要n-1趟起泡,每趟進行n-i次排序碼的比較,且每次比較都移動三次,比較和移動次數均達到最大值∶o(n2)
* •起泡排序平均時間複雜度為o(n2)
*/public class bubblesort }}
}}
public static void main(string args) ;
for (int temp : array)
system.out.println();
bs.bubblesort(array);
for (int temp : array)
}}
交換排序之氣泡排序
氣泡排序演算法的基本思想是 假設待排序表長為n,從前往後 或從後往前 兩兩比較相鄰元素的值,若為逆序 即a i 1 a i 則交換它們,直到序列比較完。我們成它為一趟冒泡,結果將最大 最小 的元素交換到待排序列的最後乙個位置。下一趟冒泡時,前一趟確定的最大元素不再參與比較,待排序列減少乙個元素,每趟...
交換排序之氣泡排序
交換排序的主要思路就是在排序過程中,不斷比較待排序序列中相鄰的兩個資料,如果次序相反,則將其位置交換,從而達到排序的目的,氣泡排序和快速排序都屬於交換排序 下面我們介紹氣泡排序的基本原理 氣泡排序是一種比較簡單的排序演算法,基本思想就是對所有的相鄰的記錄的關鍵字進行比較,如果次序不對就將其交換,從而...
交換排序之《氣泡排序》
距離上次寫部落格已經過去20天了,滷煮沒有偷懶,而是畢業找到了新的工作。於是從帝都來到了夏天不冷 冬天也不冷的廈門,2000多公里的路程,不遠千里,公司的環境超級棒!哈哈!開心!面試的時候也被問到了演算法內容,幸虧有所準備!因此準備寫下了,記下來。俗話說 好記性不如爛筆頭!有什麼不對的地方望大神們指...