演算法學習(一) 基本排序演算法

2021-07-23 10:17:27 字數 1510 閱讀 7529

原理:

序列中的元素兩兩比較,小(大)的元素交換到大(小)的元素前面,就像氣泡從水中浮出一樣。

//優化後的氣泡排序

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 ...

排序演算法學習

一直都想把排序和搜尋類的演算法總結一下,一直拖著沒寫,主要是太懶了,現在決定還是要再好好學習下這些基本的演算法。畢竟基礎真的是很重要。好了現在開始學習第乙個排序演算法 插入排序 我記得插入排序在我們以前的資料結構教程上是第乙個介紹的 插入排序 聽這個排序名字就是將乙個什麼數要插入到某個地方,不錯,他...