演算法導論之重寫排序演算法

2021-07-24 13:30:38 字數 808 閱讀 4294

// by 我執可破. 2016.11.10 於上海浦東;

// 公升序排序;

1. 插入排序 - 已測試

void insertsort(int a, int n)

// 此時a[i]>=key, 故key 在a[i+1]

a[i + 1] = key; }}

2. 希爾排序 - 已測試;

void shellsort(int a, int n)

a[i + increment] = key;

} }}3. 選擇排序 - 已測試

void selectsort(int a, int n)

} if (iminindex != i)

}}4. 氣泡排序 - 已測試

void bubblesort(int a, int n)

} }}

5. 快速排序 - 已測試

void quicksort(int a, int low, int high)

// a[k] 將 a[low~high] 劃分成兩部分;

int k = partion(a, low, high);

// 別忘記了此處 k -1,因為k 處的資料已經排好了;

quicksort(a, low, k - 1);

quicksort(a, k + 1, high);

}int partion(int a, int low, int high)

} swap(a[k + 1], a[high]);

return k + 1;

}

演算法導論之堆排序

堆排序主要是先建堆,轉化為最大堆,每次把最大的乙個 即最大堆的根節點 和最後乙個交換,這樣每次都把當前最大的乙個放到了最後。堆排序演算法中,最關鍵的就是構造初始堆。需要編寫乙個維護大頂堆性質的函式max heapify。當輸入乙個陣列l和乙個下標i,然後呼叫max heapify時,比較l i l ...

演算法導論之堆排序

二叉 堆,是乙個陣列,可以被看成乙個近似的完全二叉樹,樹上的每乙個節點對應於陣列中的乙個元素。除了最底層之外,該樹是完全充滿的,而且是從左向右填充,a.length表示陣列元素的個數,樹的根結點是a 1 這樣給定乙個節點的下標i,我們很容易計算出其父節點 i 2 左子女 2 i 右子女 2 i 1 ...

演算法導論之快速排序

def partition a,p,r x a r 錨點 主元 i p 1 for j in range p,r if a j x i 1a i a j a j a i a i 1 a r a r a i 1 return i 1 defquicksort a,p,r if p r 分治 q par...