排序虛擬碼總結
目錄
一.選擇排序
時間複雜度為Θ(n²)
演算法
輸入:n個元素的陣列A[1...n]
輸出:按非降序排列的陣列A[1...n]
- for i←1 to n-1
- k←i //設立標誌位
- for j←i+1 to n //查詢第i小的元素
- if A[j]<A[k] then k←j
- end for
- if k≠i then 交換A[i]與A[k]
- end for
操作方法:首先找到最小元素,將其存放在A[1]中,然後找到剩下的n-1個元素中的最小元素,將其存放在A[2]中,重複此過程直至找到第二大的元素,並將其存放在A[n-1]中
二.插入排序
演算法
輸入:n個元素的陣列A[1...n]
輸出:按非降序排列的陣列A[1...n]
- for i←2 to n
- x←A[i]
- j←i-1
- while(j>0) and (A[j]>x)
- A[j+1]←A[j]
- j←j-1
- end while
- A[j+1]←x
- end for
操作方法:在第i次插入中,要將A[i]插入到已排序的子陣列A[1...n-1]中的合適位置上,依次掃描序號從i-1到1的元素,每次都將A[i]和當前位置的元素比較,在掃描的每一步,元素A[1...i-1]大於A[i]都被移到序號更高的一個位置上,然後在合適的位置上插入A[i]
三.快速排序(分治法)
時間複雜度為Θ(n*logn)空間複雜度為Θ(n)
輸入:陣列A[]low...high]
輸出:(1)如有必要,輸出按上述描述的重新排列的陣列A
(2)劃分元素A[low]的新位置w
split演算法
- i←low
- x←A[low] //第一位的元素
- for j←low+1 to high //遍歷陣列中剩下所有元素
- if A[j]≤x then
- i←i+1 //用i指標來從第二個元素開始交換新增較小的元素
- if i≠j then 互換A[i]和A[j]
- end if
- end for
- 互換A[low]和A[i]
- w←i
- return A和w
操作方法:用i指標和j指標交換元素,當演算法對所有元素掃描後,用A[i]與主元交換,這樣所有小於或等於主元的元素處於它的左邊,並且所有大於主元的元素處於它的右邊,最後演算法將i賦給主元的位置w
quicksort演算法
輸入:n個元素的陣列A[1...n]
輸出:按非降序排列的陣列A[1...n]
quicksort(A,low,high)
- if low<high then
- SPLIT(A[low...high],w) //w為A[low]的新位置
- quicksort(A,low,w-1)
- quicksort(A,w+1,high)
- end if
操作方法:子陣列A[low...w-1]和A[w+1,high)遞迴地排序
四.歸併排序(分治法)
時間複雜度為Θ(n*logn)空間複雜度為Θ(n)
演算法
輸入:n個元素的陣列A[1...n]
輸出:按非降序排列的陣列A[1...n]
mergesort(A,1,n)
過程:mergesort(low,high)
- if low<high then
- mid←⌊(low+high)/2⌋
- mergesort(A,low,mid)
- mergesort(A,mid+1,high)
- MERGE(A,low,mid,high)
- end if
合併兩個有序的表
輸入:陣列A[1...m]和它的三個索引p,q,r,1≤p≤q≤r≤m,兩個子陣列A[p...q]和A[q+1...r]各自按升序排列
輸出:合併兩個子陣列A[p...q]和A[q+1...r]的陣列A[p...r]
MERGE
- //B[p...r]是個輔助陣列
- s←p;t←q+1;k←p
- while s≤q and t≤r
- if A[s]≤A[t] then
- B[k]←A[s]
- s←s+1
- else
- B[k]←A[t]
- t←t+1
- end if
- k←k+1
- end while
- if s=q+1 then B[k...r]←A[t...r]
- else B[k...r]←A[s...q]
- end if
- A[p...r]←B[p...r]
相關推薦
排序虛擬碼總結
目錄 演算法 演算法 演算法 一.選擇排序 時間複雜度為Θ(n²) 演算法 輸入:n個元素的陣列A[1...n] 輸出:按非降序排列的陣列A[1...n] for i←1 to n-1 k←i //設
演算法導論堆排序虛擬碼(學習筆記)
MAX-HEAPIFY 遞迴虛擬碼: 時間複雜度為 lg(n) 底數為2 , 維護最大堆性質的關鍵 MAX-HEAPIFY(A, i): //維護堆性質的關鍵, 用於檢測是否滿足堆的性質 l = left(i); r = right(i);
插入排序(虛擬碼)
INSERTION_SORT(A)1.for j=2 to A.length2. key=A[j]3. i=j-1;4. while i>0 and A[j]>key 5. A[i+1]=A[i] 6. i=i-17.
虛擬碼演算法之快速排序(分治排序)
開始的地方應該有個標題 我目前認為:名字不應該僅僅是一個符號,如果可以的話,應該能達到某種程度的“顧名思義”。 所以,我認為,應該叫做分治排序。 所以,你應該先知道什麼是“分治”。顧名思義,分治就是“分而治之”。為了減少知識的耦合,這裡並不詳細介紹“分治”
《演算法導論》第七章-快速排序(虛擬碼)
快速排序 虛擬碼: QuickSort(A,p,r) if p<r q = Partition(A,p,r) //確定劃分位置
歸併排序演算法的虛擬碼和實現
虛擬碼 MERGE(A,p,q,r) n1=q-p+1; n2=r-q; create new arrays L[n1+1] and R[n2+1] for i=0 to n1-1 L[i]=A[p+i]
堆排序演算法虛擬碼
// 草稿,待完善 ///////////////////////////////////////////////////// void HeapSort( 陣列,元素個數) { BuildHeap( 陣列,堆大小); // 大小就是包含的元素個數
快速排序:原始碼(C++)--虛擬碼--時間複雜度解析
namespace htx{ //////////////////1.快速排序//////////////////////// //<1>原始碼 <2>虛擬碼 <
關於排序演算法的一點知識——例項和虛擬碼
1. 插入排序 將待排序的資料分成兩個區域:有序區和無序區,每次將一個無序區中的資料按其大小插入到有序區中的適當位置,直到所有無序區中的資料都插入完成為止。 設待排序列為:12,8,10,14,6,2,排序過程如下圖:
kd樹(學習總結及虛擬碼)
kd樹是用來為求k臨近而建立的資料結構,查詢的平均複雜度是logN(和二叉樹很像) kd樹的建立 這裡在建立kd樹的時候,這裡的演算法是迴圈依次採取各個維度來構建二叉樹,也有做法是選取資料在該維度上方差最大的那一維,因為方差大代表資料較分散,會有
幾種基本排序算法總結
子序列 system aop 大於等於 != pri i++ index 元素移動 以下均采用從小到大排序: 1.選擇排序算法 個人覺得選擇排序算法是容易理解的排序算法,即從n個元素中選擇最小的一個元素與第一個元素交換,再將除第一個元素之外的n-1個元素找到最小的一
web h5常用代碼總結
版本 ios ble java return posit 密碼框 position ice 註意:本文原創,轉載請說明出處 1.使圖片和文字水平居中,給圖片css樣式:vertical-align: middle;vertical-align:middle的時候,是該元素的
常用狀態碼總結
客戶端請求 quest 頭信息 信息 指定日期 nbsp 狀態碼 post 人員 200:OK 請求成功。一般用於GET與POST請求 204:No Content 無內容。服務器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文檔 304:Not
常用的排序代碼
log 冒泡 clear index push_back last public radi div 常用排序算法的代碼: 1 class Sort { 2 public: 3 // 冒泡排序 4 int* bubbleSort(int*
Java常用代碼總結
[] blog http ati target catch () log 字符串格式化 原創作品,可以轉載,但是請標註出處地址:http://www.cnblogs.com/V1haoge/p/7004474.html 1、日期與字符串之間的轉換 1 publ
ajax常用實例代碼總結參考
瀏覽器兼容 var edi else article ndt ons font 名稱 http的交互方法有四種:get、post、put(增加數據)、delete(刪除數據) put和delete實現用的是get和post get方式 頁面不能被修改,只是獲取查詢信息
面試常考各類排序算法總結.(c#)
style index 存在 算法面試 變量 一位 選擇排序 直接插入 color 一. 面試以及考試過程中必會出現一道排序算法面試題,為了加深對排序算法的理解,在此我對各種排序算法做個總結歸納。 1.冒泡排序算法(BubbleSort) 1 public Class
PHP_冒泡排序代碼解析
temp 保存 變量 count pre 冒泡排序 代碼解析 var_dump logs <?php /** * 基本思想:將數組中的每一個下標元素遍歷出來 *依次將這些下標的值對後面一個下標的值對比 *如果大於後面一位下標的值,將兩者調換位置 */ $
經常使用排序算法總結
i+1 下標 del sta end else return trac false #include<iostream> using namespace std; //show array void show(int *ar, int len) {
單例模式的代碼總結
單例 col 方法 turn 關鍵字 工廠 運行 靜態 工廠方法 懶漢式單例類 /** * 懶漢式單例類 * 懶漢式是典型的時間換空間 * @author MJ * */ public class LazySingleton { private stat