poj2388 堆排序和快排的练手
来源:互联网 发布:mac mini好用吗 编辑:程序博客网 时间:2024/05/19 11:38
就是排序后求中位数,直接调用sort就行,这里我手写堆排序和快排练练手。
堆排序:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int a[100005], num;int n;int parent(int i){ return i / 2;}int leftson(int i){ return 2 * i;}int rightson(int i){ return 2 * i + 1;}void swapit(int t1, int t2){ int t = a[t1]; a[t1] = a[t2]; a[t2] = t;}void maxheapify(int i){ int l, r, maxnum; l = leftson(i); r = rightson(i); maxnum = i; if(l <= num && a[l] > a[i]) maxnum = l; if(r <= num && a[r] > a[maxnum]) maxnum = r; if(maxnum != i) { swapit(maxnum, i); maxheapify(maxnum); } return ;}void buildmaxheap(){ num = n; for(int i = n / 2; i >= 1; -- i) maxheapify(i);}void heapsort(){ buildmaxheap(); for(int i = n; i >= 2; -- i) { swapit(1, i); num--; maxheapify(1); }}int main(){ cin >> n; for(int i = 1; i <= n; ++ i) cin >> a[i]; heapsort(); cout << a[n / 2 + 1] << endl; return 0;}
快排
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int a[100005], n;int partnum(int l, int r){ int x = a[r]; int i = l - 1; for(int j = l; j <= r - 1; ++ j) { if(a[j] <= x) { i++; swap(a[i], a[j]); } } swap(a[i + 1], a[r]); return i + 1;}void quicksort(int l, int r){ if(l < r) { int t = partnum(l, r); quicksort(l, t - 1); quicksort(t + 1, r); }}int main(){ cin >> n; for(int i = 1; i <= n; ++ i) cin >> a[i]; quicksort(1, n); cout << a[n / 2 + 1] << endl; return 0;}
1 0
- poj2388 堆排序和快排的练手
- 快排和堆排序
- 快排和堆排序
- 快排、堆排和归并排序的Python实现
- poj2388快排
- 快排 和 堆排序算法的细节代码分析
- 快排、堆排序
- 快排和堆排序对比
- 快排和堆排序分析
- java 快排和堆排序
- 堆排序、快排的坑
- c语言快排(快速排序)poj2388《学习记录》
- SDNU__1521.排序——堆排和快排
- 各种排序的实现:希尔 归并 堆排 快排
- 直插,快排,堆排,归并排序的分析
- 排序(快排,归并,堆排)
- 归并排序,堆排序,快排的简单实现
- 快排、归并排序、堆排序的实现
- 按ESC键暂停游戏 Time.timeScale = 0
- hibernate如何实现延时加载
- tomcat架构分析(valve机制)
- Andoird 混淆代码学习心得(上)
- python sum
- poj2388 堆排序和快排的练手
- android 页面文字上下滚动
- Android调用相机拍照并返回路径和调用系统图库选择图片
- 拔河
- 字符串拷贝与进制转换的简单应用
- python机器学习库编程实战
- 简析TCP的三次握手与四次分手
- - Pairs Forming LCM(算数基本定理)
- gethostbyname