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

  

算法总结之 数组的partition调整 三个值的升序的更多相关文章

  1. 算法总结之 数组的partition调整

    给定一个有序数组arr, 调整arr使得这个数组的左半部分没有重复元素且升序,而且不用保证右边是否有序 分区就ok了 u区是 无重复且升序的  u是这个区域的最后位置,初始u=0 i做从左到右的遍历, ...

  2. 《程序员代码面试指南》第八章 数组和矩阵问题 数组的partition 调整

    题目 数组的partition 调整 java代码 package com.lizhouwei.chapter8; /** * @Description: 数组的partition 调整 * @Aut ...

  3. [算法]数组的partition调整

    题目一: 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复部分且升序,而不用保证右部分是否有序. 例如:arr=[1,2,2,2,3,3,4,5,6,6,7,7,8,8,9,9],调整 ...

  4. [程序员代码面试指南]数组和矩阵-数组的partition调整

    题目 补充问题:数组只含0,1,2,对数组排序,要求时间复杂度O(n),额外空间复杂度O(1) 题解 维护三个变量,l,idx,r.左区间[0,l],中间区间[l+1,idx],右区间[idx+1,r ...

  5. O(n*logn)级别的算法之二(快速排序)的三种实现方法详解及其与归并排序的对比

    一,单路快排1.测试用例: #ifndef INC_06_QUICK_SORT_DEAL_WITH_NEARLY_ORDERED_ARRAY_SORTTESTHELPER_H #define INC_ ...

  6. 字符串匹配KMP算法中Next[]数组和Nextval[]数组求法

    数据结构课本上给了这么一段算法求nextval9[]数组 int get_nextval(SString T,int &nextval[ ]) { //求模式串T的next函数修正值并存入数组 ...

  7. 字符串模式匹配之KMP算法的next数组详解与C++实现

    相信来看next数组如何求解的童鞋已经对KMP算法是怎么回事有了一定的了解,这里就不再赘述,附上一个链接吧:https://www.cnblogs.com/c-cloud/p/3224788.html ...

  8. Java成神之路:第二帖---- 数据结构与算法之稀疏数组

    数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...

  9. poj 2406:Power Strings(KMP算法,next[]数组的理解)

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 30069   Accepted: 12553 D ...

随机推荐

  1. java API Runtime 启动进程

    Runtime run = new Runtime.getRuntime(); Process p = run.exec("notepad.exe F:\\lesson\\a.java&qu ...

  2. Yii 2 的安装 之 踩坑历程

    由于刚接触yii2 ,决定先装个试试:可是这一路安装差点整吐血,可能还是水平有限吧,  但还是想把这个过程分享出来,让遇到同样问题的同学有个小小的参考,好了言归正传!! <(~.~)> 下 ...

  3. 【BZOJ3998】[TJOI2015]弦论 后缀自动机

    [BZOJ3998][TJOI2015]弦论 Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T ...

  4. A Simple Problem with Integers(线段树)

    F - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:% ...

  5. Java中Solr集群的测试

    import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.common.SolrInputDoc ...

  6. ehcache 常用配置项详解(三)

    EhCache 给我们提供了丰富的配置来配置缓存的设置: 这里列出一些常见的配置项: cache元素的属性: name:缓存名称 maxElementsInMemory:内存中最大缓存对象数 maxE ...

  7. 024-Spring Boot 应用的打包和部署

    一.概述 二.手工打包[不推荐] 打包命令:maven clean package 打包并导出依赖:maven clean package dependency:copy-dependencies 1 ...

  8. 4.4 使用STM32控制MC20进行GPS帧数据解析

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  9. paramiko 模块安装和使用

    一.Centos安装Paramiko 1.安装组件 yum install openssl openssl-devel python-dev pycrypto -y yum install zlib- ...

  10. Yii2 自定义独立验证器

    新建一个文件: ?php /** * author : forecho <caizhenghai@gmail.com> * createTime : 2015/7/1 14:54 * de ...