算法代码:查找数组中第i小的元素
2015-09-24 21:18
399 查看
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include <string.h> using namespace std; void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } int Partition(int A[], int p, int r)//将A[r]作为参考值,来划分数组,左边小于,右边大于(本来为快速排序的一部分) { int x = A[r]; int i = p-1; for(int j = p; j < r; j ++) if(A[j] <= x) { i++; swap(A[i],A[j]); } swap(A[i+1],A[r]); return i+1; } int Randomized_Partition(int A[], int p, int r) { srand((unsigned)time(NULL)); int i = (rand() % (r-p+1))+ p;//获取[p,r]之间的随机数 swap(A[r], A[i]); return Partition(A, p, r); } int Randomized_Select(int A[], int p, int r, int i) { if(p == r) { return A[p]; } int q = Randomized_Partition(A, p, r); int k = q - p + 1; if(i == k) return A[q]; else if(i < k) return Randomized_Select(A, p, q-1, i); else return Randomized_Select(A, q + 1, r, i - k); } int main() { int T, i = 1, n, a[100]; freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); cin >> T; n = T; while(T--) { cin>>a[i]; i++; } cout<<Randomized_Select(a,1,8,5); fclose(stdin); //fclose(stdout); return 0; }
相关文章推荐
- 关于Java中多个数据excel表格的导出
- 3、下载与安装Eclipse
- java实现链表的反转
- Java中Collection和Collections的区别
- VS2010/MFC编程之树型控件的创建及CTreeCtrl类的成员函数和实例
- 3、下载与安装Eclipse
- 二级指针的申请跟删除(基于C++的new机制)
- java socket 长连接 nputStream的read 阻塞问题情况之一
- [一道搜狗输入法的面试题]C++转换构造函数和类型转换函数
- 使用git来控制版本 并分享到github上(自学或分享必备)
- java 操作excel
- java web总结(JNDI的配置)
- struts2结合spring json序列化问题
- PHP学习笔记(七):命名空间
- Java基础知识强化71:正则表达式之概述和基本规则
- Java中Set集合的使用
- struts2 使用Maven搭建Struts2框架的开发环境
- 支付宝赞助代码..
- Java虚拟机4:内存溢出
- Java基础知识强化70:正则表达式之引入案例(QQ号码校验)