排序可以說時最基礎的演算法之一,排序就是將資料按照某種邏輯重新排列的過程,比如從大到小排序、從小到大排序;排序非常常見比如有購物車物品的排序、歷史訂單的排序等等;演算法我們比較關心的主要有兩點:時間複雜度與空間複雜度,排序演算法一樣;這篇文章只介紹幾種基本的排序演算法:氣泡排序、插入排序、選擇排序;
演算法邏輯上分為已排序未排序兩個區間,從當前列表中選擇最小的元素與當前列表第乙個元素交換位置,從列表剩餘元素中找到最小元素與列表第二個元素交換位置如此重複執行的演算法為選擇排序演算法;
選擇排序與資料的初始狀態無關,每次查詢最小元素值時都會與陣列中元素進行交換位置,因此選擇排序為非穩定排序演算法,在各種情況下演算法時間複雜度都為o(n2),空間複雜度為o(n);
func selectionsort(data int)
for i := 0; i < n; i++
}//交換元素,交換後未已排序資料
data[i], data[min] = data[min], data[i]}}
與選擇排序類似在邏輯上列表分為已排序和未排序兩個區間,初始時已排序區間未為左邊第乙個元素,插入排序的核心為從右邊未排序區間中選擇元素插入到左邊合適的位置,直到已排序列表長度等於原始列表長度;插入排序演算法的關鍵步驟為元素比較與元素的移動,當從未排序端拿資料插入到已排序端時已排序端可能會存在大量的資料移動;
與選擇排序不同的是列表初始狀態對插入排序的效能影響很大,當列表初始狀態有序度很高時插入排序並不需要大量移動資料,從中可以看出插入排序為原地排序演算法、演算法是穩定的;
演算法最好情況下時間複雜度為:o(n)、平均、最壞複雜度為:o(n2);
func insertionsort(data int) else
}data[j+1] = value}}
每次比較相鄰兩個元素是否滿足,否則交換相鄰兩個元素,每次冒泡至少乙個元素移動到它所屬位置,重複n次完成列表排序;冒泡操作核心為項鍊元素交換,空間複雜度為o(1),為原地排序演算法;演算法是穩定的,最好情況時間複雜度為為o(n),平均與最壞情況時間複雜度為:o(n2);
基礎演算法 排序 一
總結 排序演算法維基百科 經典排序演算法 快速排序quick sort 經典排序演算法 桶排序bucket sort 經典排序演算法 插入排序insertion sort 經典排序演算法 基數排序radix sort 經典排序演算法 鴿巢排序pigeonhole sort 經典排序演算法 歸併排序m...
基礎演算法 排序(一)
氣泡排序的基本思路是 它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。氣泡排序總的平均時間複雜度為o n2 public static void ...
一 基礎排序演算法
一 氣泡排序 氣泡排序是可用的最慢的排序演算法之一,但是它也是最容易理解和實現的一種排序演算法。這種排序的得名是由與數值 像氣泡一樣 從序列的一端浮動到另外一端。假設現在要把一列數按公升序的方式進行排序,將較大的數值浮動到右側,而小的浮動到左側。這種效果可以通過氣泡排序來實現,具體 如下 首先新建乙...