小范围排序
来源:互联网 发布:转换淘宝网址分享微信 编辑:程序博客网 时间:2024/05/22 11:56
#include <iostream>#include<algorithm>#include <vector>using namespace std;class ScaleSort {public: int* sortElement(int* A, int n, int k) { vector<int> B(k); int i, j; for (i = 0; i<k; i++) B[i] = A[i]; //B={1,2} minheap(B, k); //i<8循环, for (i = 0; i<n - k; i++) { A[i] = B[0]; B[0] = A[i + k]; shiftdown(B, 0, k); } //循环结束后:B={9,10};A={ 1, 2, 3, 4, 5, 6, 7, 8, 10, 9 }; //j=2;j<10;j++ for (j = n - k; j<n; j++) { A[j] = B[0]; cout << j << ":" << A[j] << endl; if (j == n - 1) break; B[0] = B[--k]; shiftdown(B, 0, k); } //这个循环两次,j=8时,A[j]=9;j=9时,A[j]=10 return A; } void minheap(vector<int> &a, int n){ int i = n / 2 - 1; for (i; i >= 0; i--){ shiftdown(a, i, n); } } void shiftdown(vector<int> &a, int i, int n){ int j = 0; int flag = 1; while (i * 2 + 1<n && flag){ if (i * 2 + 2< n && a[i * 2 + 2] < a[i * 2 + 1]) j = i * 2 + 2; else j = i * 2 + 1; if (a[i] > a[j]){ int temp = a[i]; a[i] = a[j]; a[j] = temp; i = j; } else flag = 0; } }};int main(int argc, char *argv[]){ int a[] = { 1, 2, 4, 3, 6, 5, 8, 7, 10, 9 }; int size; ScaleSort* hs = new ScaleSort(); int* resu = hs->sortElement(a,10,2); int i; for (i = 0; i < 10; i++) cout << resu[i] << " "; cout << endl; system("pause"); return 0;}
0 0
- 小范围排序
- 小范围排序
- 小范围排序
- 小范围排序
- 小范围排序练习题
- 小范围排序
- 小范围排序-------------->_<
- 小范围排序
- 小范围排序
- 排序11:小范围排序
- 在线编程--小范围排序
- 小范围排序(C++)
- 小范围排序 --使用堆排序
- 小范围排序(堆排序)
- 小范围排序(巧用堆排序) -- 算法小结
- 海量小范围数据排序(位图)
- 【刷题之路】小范围排序练习
- 数组排序 —— 堆排序算法的应用(小范围排序、重复值判断)
- 5.分析system_call中断处理过程
- 2. Orac在windows平台上的安与设置
- RBAC权限管理
- ISA TEST黑客过关小游戏第一关解密
- HTML5回调函数与地理定位
- 小范围排序
- Codeforces 16E Fish (状压dp+概率)
- 3. SQL语言基础
- Android ListView的不同样式,getItemViewType,getViewTypeCount
- 数列基础
- VI快捷键
- HDU 2053 Switch Game(开灯问题,唯一分解定理)
- 4. Oracle PL/SQL语言及编程
- 5. sql*plus