给定一个数组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++;
} } } }

  

最新文章

  1. AngularJS学习第一课
  2. IOS开发基础知识--碎片15
  3. MongoDB-query查询接口
  4. 利用ganymed-ssh2远程执行其它Linux机器上的shell命令
  5. 分模块创建maven项目(一)
  6. [转]ubuntu 12.04添加launcher方法
  7. CentOS安装tomcat
  8. NOIP2011 铺地毯
  9. Unity Android 5.6版本Resources.Load效率的问题
  10. JDK各个版本的新特性
  11. Android 浏览器内 H5 电脑 Chrome 调试
  12. java web获取请求体内容
  13. sakila数据库及其他数据库实例文件
  14. shiro自定义realm支持MD5算法认证(六)
  15. Relinking Oracle Home FAQ ( Frequently Asked Questions) (Doc ID 1467060.1)
  16. PHP哈希表碰撞攻击
  17. 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
  18. Dictionary的应用
  19. luoguP5024 保卫王国 动态dp
  20. 页面刷新 vuex 数据重新被初始化

热门文章

  1. 使用 fastjson将字符串转为 list&lt;map&lt;string,object&gt;&gt;
  2. C#安装,启动,停止,卸载Windows服务
  3. hdu 5068(线段树+矩阵乘法)
  4. (转)gethostbyname() -- 用域名或主机名获取IP地址
  5. MySQL 5.7.9修改root密码以及新特性
  6. window7系统下安装scrapy爬虫框架
  7. 我的Android进阶之旅------>Android 众多的布局属性详解
  8. HDU 3591 多重背包
  9. 使用nose_parameterized使unitTest实现参数化
  10. R语言(一)