原理:
序列中的元素兩兩比較,小(大)的元素交換到大(小)的元素前面,就像氣泡從水中浮出一樣。
//優化後的氣泡排序
public
void
bubblesort(int arr)}}
}
演算法時間複雜度:o(n^2)原理:
從左至右遍歷,找到最小(大)的元素,然後與第乙個元素交換
從剩餘未排序元素中繼續尋找最小(大)元素,然後與第二個元素進行交換
以此類推,直到所有元素均排序完畢
//選擇排序,減少了交換的次數,效能優於冒泡
public void selectsort(int arr)
}if(i!=min)}}
演算法時間複雜度:o(n^2)原理:
假定第乙個元素已經排好序
取下乙個元素,在已經排好序的序列中從後往前掃瞄
如果該元素小於前面已經排好序的元素,則交換位置,直到遇到小於該元素的位置則停止
如果該元素大於前面已經排好序的元素,則重複2
//插入排序,一般來說效能優於冒泡和選擇排序
public
void
insertsort(int arr)else}}
}
演算法時間複雜度:o(n^2)原理:在插入排序上的改進,設定步長來分組進行比較,希爾排序中最主要的操作是比較,而不是交換。
希爾排序的關鍵在於步長遞減序列的確定,任何遞減至1步長的序列都可以,目前已知的比較好的序列有:
shell』s 序列: n/2 , n/4 , …, 1 (重複除以2);
hibbard』s 序列: 1, 3, 7, …, 2k - 1 ;
knuth』s 序列: 1, 4, 13, …, (3k - 1) / 2 ;該序列是本文**中使用的序列。
已知最好的序列是 sedgewick』s (knuth的學生,algorithems的作者)的序列: 1, 5, 19, 41, 109, ….
h=h/3; //減少步長直至為1,最後一次插入排序}}
演算法時間複雜度:o(nlogn) 演算法學習(五) 基本排序演算法總結
前幾天學習幾個基本的排序演算法,下面來總結一下 在維基百科上有排序演算法的一張圖,紅線是我之前總結學習的。從我們學習的排序演算法中可以分為兩類 簡單排序有冒泡 選擇 插入排序 改進演算法有希爾 堆排序 歸併排序和快速排序。快速排序是冒泡的公升級版,屬於交換排序 希爾排序是直接插入排序的公升級,屬於插...
演算法學習 排序演算法
排序演算法 平均時間複雜度 最好情況 最壞情況 空間複雜度 穩定性氣泡排序 o n 2 o n o n 2 o 1 穩定選擇排序 o n 2 o n 2 o n 2 o 1 不穩定插入排序 o n 2 o n o n 2 o 1 穩定希爾排序 o nlogn o nlogn o nlogn o 1 ...
排序演算法學習
一直都想把排序和搜尋類的演算法總結一下,一直拖著沒寫,主要是太懶了,現在決定還是要再好好學習下這些基本的演算法。畢竟基礎真的是很重要。好了現在開始學習第乙個排序演算法 插入排序 我記得插入排序在我們以前的資料結構教程上是第乙個介紹的 插入排序 聽這個排序名字就是將乙個什麼數要插入到某個地方,不錯,他...