快速排序,歸併,堆 ,STL

2022-04-09 13:21:18 字數 1257 閱讀 2250

// by morewindows( ) 

#include  

#include  

#include  

using namespace std; 

//------------------------快速排序---------------------------- 

void quick_sort(int s, int l, int r) 

s[i] = x; 

quick_sort(s, l, i - 1); // 遞迴呼叫  

quick_sort(s, i + 1, r); 

} } //------------------------歸併排序---------------------------- 

//將有二個有序數列a[first...mid]和a[mid...last]合併。 

void mergearray(int a, int first, int mid, int last, int temp)   

while (i <= m) 

temp[k++] = a[i++]; 

while (j <= n) 

temp[k++] = a[j++]; 

for (i = 0; i < k; i++) 

a[first + i] = temp[i]; 

} void mergesort(int a, int first, int last, int temp)  } 

bool mergesort(int a, int n) 

//------------------------堆排序--------------------------- 

inline void swap(int &a, int &b) 

//建立最小堆 

//  從i節點開始調整,n為節點總數 從0開始計算 i節點的子節點為 2*i+1, 2*i+2 

void minheapfixdown(int a, int i, int n) 

a[i] = temp; 

} //建立最小堆 

void makeminheap(int a, int n) 

void minheapsorttodescendarray(int a, int n)  } 

const int maxn = 5000000; 

int a[maxn]; 

int b[maxn], c[maxn], d[maxn]; 

int main()   

排序(三)堆排序 歸併排序 快速排序

7 堆排序 堆排序是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構 通常堆是通過一維陣列來實現的 並同時滿足堆的性質 即子結點的鍵值總是小於 或者大於 它的父節點。我們可以很容易的定義堆排序的過程 1 建立乙個堆 2 把堆頂元素 最大值 和堆尾元素互換 3 把堆的尺寸縮小1...

歸併,快速排序

歸併排序 實現思想 歸併的含義很明顯就是將兩個或者兩個以上的有序表組合成乙個新的有序表。歸併排序中一般所用到的是2 路歸併排序,即將含有n個元素的序列看成是n個有序的子串行,每個子串行的長度為1,而後兩兩合併,得到n 2個長度為2或1的有序子串行,再進行兩兩合併。直到最後由兩個有序的子串行合併成為乙...

快速排序 歸併排序

感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...