快速排序和堆排序
最近在刷遞歸但是老是要用到這兩個排序,然后自己還老是忘,所以干脆放在這方便回顧。
快速排序
int getStandard(auto& array, int i, int j) {int key = array[i];while (i < j) {while (i < j && array[j] >= key) {j--;}if (i < j) {array[i] = array[j];}while (i < j && array[i] <= key) {i++;}if (i < j) {array[j] = array[i];}}array[i] = key;return i; }void QuickSort(auto& array, int low, int high) {if (low < high) {int standard = getStandard(array, low, high);QuickSort(array, low, standard - 1);QuickSort(array, standard + 1, high);} }int main() {int arr[]={3,4,2,5,7,9};vector<int> array(arr,arr+6);int size =array.size();QuickSort(array, 0, size - 1);for(int i:array){cout<<i;}return 0; }堆排序
void max_heap(auto& vec,int start,int end){int dad = start;int son = dad * 2 + 1;while (son <= end) { if (son + 1 <= end && vec[son] < vec[son + 1])son++;if (vec[dad] > vec[son]) return;else{swap(vec[dad], vec[son]);dad = son;son = dad * 2 + 1;}}}void build_heap(auto& vec){int size=vec.size();for(int i=size/2-1;i>=0;i--){max_heap(vec,i,size-1);}for(int i=size-1;i>0;i--){swap(vec[i],vec[0]);max_heap(vec,0,i-1); } }int main(){int arr[]={3,2,4,7,6,1};vector<int>vec(arr,arr+6);build_heap(vec);for(int i:vec){cout<<i;} }總結
- 上一篇: 实习第二弹——交换机的配置与统计
- 下一篇: 线性时间排序