zoukankan      html  css  js  c++  java
  • 荷兰国旗问题,对于一个数组,给定一个数组中的元素,将数组中比该数小的放左边,比该数大的放右边。

    /**
     * 创建人:yang.liu
     * 创建时间:2019/7/23 16:27
     * 版本:1.0
     * 内容描述:对于一个数组,给定一个数组中的元素,将数组中比该数小的放左边,比该数大的放右边。
     * 通过快排中的分区思想来做。
     */
    public class QuicksortPartition {
    
        public static void main(String[] args) {
            int[] arr = {7, 2,1,8,5, 7, 3,7,9,4,6, 7};
            solution(arr, 7);
            System.out.println(Arrays.toString(arr));
        }
    
        /**
         * 7, 2, 1, 8, 5, 7, 3, 7, 9, 4, 6, 7, 初始状态是left和cur指向第一个元素位置,right指向最后一个元素的位置。
         * [left,cur)之间是维护的是和给定数字7相等的数,cur是每次需要判断是比7大还是小,还是相等。
         */
        public static void solution(int[] arr, int target) {
            if (arr == null || arr.length == 0) {
                return;
            }
            int left = 0;
            int cur = 0;
            int right = arr.length - 1;
            while (cur <= right) {
                if (arr[cur] < target) { // cur比目标数小,把这个小点儿的数换到维护区间的最左边,也就是left的位置。
                    if (cur != left) { //如果当前没有维护和目标数7相等的区间,就不用交换,此时left和cur位置一样。
                        swap(arr, left, cur);
                    }
                    cur++;
                    left++;
                } else if (arr[cur] == target) { // 和目标数相等,直接比较下一个
                    cur++;
                } else { //cur比目标数大,就把大的数置换到数组后面,判断置换过来的新的数是大、小还是相等
                    swap(arr, cur, right);
                    right--;
                }
            }
        }
    
        public static void swap(int[] arr, int a, int b) {
            int temp = arr[a];
            arr[a] = arr[b];
            arr[b] = temp;
        }
    
    }
    /**
     * 执行前:[7, 2, 1, 8, 5, 7, 3, 7, 9, 4, 6, 7]
     * 执行后:[2, 1, 5, 3, 6, 4, 7, 7, 7, 7, 9, 8]
     *
     * 欢迎评论、留言、发表看法。谢谢!
     */
    
  • 相关阅读:
    Redis 的安装
    oracle表分区
    HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
    HashMap和LinkedHashMap区别
    SpringMVC MultiActionController 默认方法名解析器
    静态资源无法访问问题
    JMeter-简单控制器
    JMeter-随机顺序控制器
    JMeter-随机控制器
    JMeter-交替控制器
  • 原文地址:https://www.cnblogs.com/mengHeJiuQIan/p/11233484.html
Copyright © 2011-2022 走看看