博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三章续:O(n)复杂度算法
阅读量:4136 次
发布时间:2019-05-25

本文共 1841 字,大约阅读时间需要 6 分钟。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;inline int my_rand(int low, int high) { srand((unsigned)time(NULL)); int size = high - low + 1; return low + rand() % size; } int partition(int array[], int left, int right) { int pivot = array[right]; int pos = left-1; for(int index = left; index < right; index++) { if(array[index] <= pivot) swap(array[++pos], array[index]); } swap(array[++pos], array[right]); return pos;//返回pivot所在位置 } //最坏情况下是线性时间O(N)bool median_select(int array[], int left, int right, int k) { //第k小元素,实际上应该在数组中下标为k-1 if (k-1 > right || k-1 < left) return false; //真正的三数中值作为枢纽元方法,关键代码就是下述六行 int midIndex=(left+right)/2; if(array[left]
k-1) return median_select(array, left, pos-1, k); else return median_select(array, pos+1, right, k); } //总的时间复杂度为线性期望时间:O(n+k)=O(n)(当k比较小时)bool rand_select(int array[], int left, int right, int k) { //第k小元素,实际上应该在数组中下标为k-1 if (k-1 > right || k-1 < left) return false; //随机从数组中选取枢纽元元素 int Index = my_rand(left, right); swap(array[Index], array[right]); int pos = partition(array, left, right); if (pos == k-1) return true; else if (pos > k-1) return rand_select(array, left, pos-1, k); else return rand_select(array, pos+1, right, k); } //平均为O(N)bool kth_select(int array[], int left, int right, int k) { //直接取最原始的划分操作 if (k-1 > right || k-1 < left) return false; int pos = partition(array, left, right); if(pos == k-1) return true; else if(pos > k-1) return kth_select(array, left, pos-1, k); else return kth_select(array, pos+1, right, k); } int main() { int array1[] = {7, 8, 9, 54, 6, 4, 11, 1, 2, 33}; int array2[] = {7, 8, 9, 54, 6, 4, 11, 1, 2, 33}; int array3[] = {7, 8, 9, 54, 6, 4, 11, 1, 2, 33}; int numOfArray = sizeof(array1) / sizeof(int); for(int i=0; i

转载地址:http://ybvvi.baihongyu.com/

你可能感兴趣的文章
对话周鸿袆:从程序员创业谈起
查看>>
web.py 0.3 新手指南 - 如何用Gmail发送邮件
查看>>
web.py 0.3 新手指南 - RESTful doctesting using app.request
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>