算法总结之 数组的partition调整 三个值的升序
2024-09-25 06:12:12
给定一个数组arr, 其中只可能有 0,1,2三个值,请实现arr排序
另一种问法: 有一个数组,只有红 蓝 黄 球,请事先红球全放在数组的左边,蓝球放中间,黄球放右边
另一种问法: 有一个数组,再给定一个值K, 请实现比k小的数都放在数组的左边,等于k的放中间,大于k的放右边
思路:
生成变量left arr[0....left] 上面都是0 left是这个区域的最右位置 初始时 left =-1
生成变量index 利用这个变量从左到右的遍历, arr[left+1...index]上面都是1 初始index=0
生成变量right, arr[right....N-1]上面都是2,right是这个区域的当前最左位置,初始时时 right为N
然后进行遍历, 看看当前元素是 0 1 2 并且放到相应的位置去
这个划分区域的思想很棒,很给力!非常值得学习与借鉴!
package TT; public class Test82 { public void sort (int[] arr){
if(arr==null ||| arr.length<2){
return;
}
int left = -1;
int index=0;
int right =arr.length-1;
while(index<right){
if(arr[index]==0){
swap(arr,++left,index++);
}else if(arr[index]==2){
swap(arr,index,--right)
}else {
index++;
} } } }
最新文章
- AngularJS学习第一课
- IOS开发基础知识--碎片15
- MongoDB-query查询接口
- 利用ganymed-ssh2远程执行其它Linux机器上的shell命令
- 分模块创建maven项目(一)
- [转]ubuntu 12.04添加launcher方法
- CentOS安装tomcat
- NOIP2011 铺地毯
- Unity Android 5.6版本Resources.Load效率的问题
- JDK各个版本的新特性
- Android 浏览器内 H5 电脑 Chrome 调试
- java web获取请求体内容
- sakila数据库及其他数据库实例文件
- shiro自定义realm支持MD5算法认证(六)
- Relinking Oracle Home FAQ ( Frequently Asked Questions) (Doc ID 1467060.1)
- PHP哈希表碰撞攻击
- 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
- Dictionary的应用
- luoguP5024 保卫王国 动态dp
- 页面刷新 vuex 数据重新被初始化
热门文章
- 使用 fastjson将字符串转为 list<;map<;string,object>;>;
- C#安装,启动,停止,卸载Windows服务
- hdu 5068(线段树+矩阵乘法)
- (转)gethostbyname() -- 用域名或主机名获取IP地址
- MySQL 5.7.9修改root密码以及新特性
- window7系统下安装scrapy爬虫框架
- 我的Android进阶之旅------>Android 众多的布局属性详解
- HDU 3591 多重背包
- 使用nose_parameterized使unitTest实现参数化
- R语言(一)