學習 排序演算法

2022-05-13 18:23:24 字數 2351 閱讀 4804

模板題:洛谷p1177【模板】快速排序

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

}重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

氣泡排序演算法的運作如下:

}車廂重組

對於有些資料,我們發現,不一定要n-1次才能排完。例如1 5 2 3 4 6,我們發現只需一趟排序就可以將整個序列排完,於是,我們可以設定乙個布林變數,判斷是否有進行交換,如果沒有交換,說明已經排序完成,進而減少幾趟排序。

偽**

function sort(array,length)

if(ok)

break //沒有交換說明已經排完,直接退出。

} }}

插入排序的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

從第乙個元素開始,該元素可以認為已經被排序

取出下乙個元素,在已經排序的元素序列中從後向前掃瞄

如果該元素(已排序)大於新元素,將該元素移到下一位置

重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

將新元素插入到該位置後

重複步驟2~5

function sort(arr, len)

}arr[j] = temp}}

快速排序(英語:quicksort),又稱劃分交換排序(partition-exchange sort),簡稱快排,一種排序演算法,最早由東尼·霍爾提出。在平均狀況下,排序\(n\)個專案要\(n\log n\)次比較。在最壞狀況下則需要\(n^\)次比較,但這種狀況並不常見。事實上,快速排序\(o(n\log n)\)通常明顯比其他演算法更快,因為它的內部迴圈可以在大部分的架構上很有效率地達成。

快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)。

步驟為:

從數列中挑出乙個元素,稱為"基準"(pivot),

重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準後面(相同的數可以到任何一邊)。在這個分割槽結束之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

遞迴地(recursively)把小於基準值元素的子數列和大於基準值元素的子數列排序。

遞迴到最底部時,數列的大小是零或一,也就是已經排序好了。這個演算法一定會結束,因為在每次的迭代(iteration)中,它至少會把乙個元素擺到它最後的位置去。

通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

假設待排序的序列為\(\),首先任意選取乙個記錄(通常可選中間乙個記作為樞軸或支點),然後重新排列其餘記錄,將所有關鍵字小於它的記錄都放在左子串行中,所有關鍵字大於它的記錄都放在右子串行中。由此可以將該「支點」記錄所在的位置mid作分界線,將序列分割成兩個子串行和。這個過程稱作一趟快速排序(或一次劃分)。

一趟快速排序的具體做法是:附設兩個指標i和j,它們的初值分別為l和r,設樞軸記錄取mid,則首先從j所指位置起向前搜尋找到第乙個關鍵字小於的mid的記錄,然後從i所指位置起向後搜尋,找到第乙個關鍵字大於mid的記錄,將它們互相交換,重複這兩步直至i>j為止。

學習排序演算法

把目前學習的排序演算法記下來,方便以後複習package sort 冒泡 public class sort sort a for int i 0 ia j 1 package sort 插入 public class insertsort insertsort a,a.length print a...

演算法學習 排序演算法

排序演算法 平均時間複雜度 最好情況 最壞情況 空間複雜度 穩定性氣泡排序 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 ...

學習排序演算法簡介

學習排序演算法簡介 學習排序 learning to rank,ltr 是一類基於機器學習方法的排序演算法。傳統經典的模型,例如基於tfidf特徵的vsm模型,很難融入多種特徵,也就是除了tfidf特徵之外,就無法融入其他種類的特徵了。而機器學習的方法很容易融合多種特徵,而且有成熟深厚的理論基礎,引...