一种特别适用的数字分区函数,分享一下
来源:互联网 发布:多功能数据擦除机 编辑:程序博客网 时间:2024/04/29 11:16
试想一下如果存在一个函数,能够实现对任意的数组,选取一个数字pivot之后对该数组的数字进行分区,即得到基于参考pivot值的大小将数组分为<pivot在左边而>pivot在数组的右边,或者反过来,对于这种分区,在获取数组的基于某一元素获取该数组的前k个小于或者大于它的数来说很有效果例如 4,1,2,5,3,6,0,8来说,若进行分区(4)则得到1,2,3,0,5,6,5,8基于算法的变形例如求出某个坐标的周围离远点距离最小的k个坐标点这对于游戏的优化或者碰撞检测来说避免了额外的开销,所以分享一下,希望不吝纠正,提出宝贵意见
源码:
int detachAraayByNum(int *a,int length)
{
int pivot = a[0];//默认选取开始的元素作为基准值,可随意选择
int index = 1;//记录比基准值大的一个元素的位置便于交换
for(int i=1;i<length;i++)
{
if(a[i]<=pivot)
{
if(index!=i)//否则进行判断,交换,保证最小值在左侧
{
int temp = a[i];
a[i] = a[index];
a[index] = temp;
}
index++;
}
//满足小于基准值的时候i,index同步自增
}
a[0] = a[index-1];
a[index-1] = pivot;
//由于程序的目的在于得出最小的k个数,所以没必要保持原来顺序
//所以只需要进行简单的交换,而避免移动元素带来的开销
return index;
}
- 一种特别适用的数字分区函数,分享一下
- 初中时特别喜欢的电视剧叫《力克千年虫》不知道大家看过没,分享一下
- 冯仑:创业,是一种特别的人生
- 这里和大家分享一下SqlServer 分区遇到的问题 How to Remove (Undo) Table Partitioning
- java foreach不适用的一种情况
- 分享一下自己整理的pb常用函数
- 分享一下,C 语言free 函数的原理
- 今天新学习的函数,和大家分享一下
- 特别调查:关于圣诞节的数字报告
- 数字101的特别之处
- 特别大的数字比较大小
- 寻找特别的数字poj1316-Self Numbers
- 世界上最特别的函数
- 特别的Java构造函数
- 给大家分享一下自己写的验证码api,有汉字、字母数字两类
- 分享一个转换数字格式的函数,将任意数字转化为5.00样式的数字
- 很适用的几个函数
- 适用的字符串hash函数
- sap bw hierarchy table 介绍
- C++类的复制构造函数
- ResolveClientUrl ResolveUrl
- Essential c++学习系列第二章 函数与内存机制初探
- leetcode 287: Find the Duplicate Number
- 一种特别适用的数字分区函数,分享一下
- C#_在VS2010下进行单元测试
- block学习
- 毕设帮(5188.help)开发日志——毕设帮构想的由来
- 我们都很喜欢的类列表树视图
- 只能输入正整数 以及常用的正则表达式
- SQL Server char nchar vchar nvarchar 辨析
- .net2.0的 Mscomm在XP运行失败问题
- 【bzoj1670】【Usaco2006 Oct】【护城河的挖掘】【凸包】