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