[Algo] 11. Rainbow Sort

Posted xuanlu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Algo] 11. Rainbow Sort相关的知识,希望对你有一定的参考价值。

Given an array of balls, where the color of the balls can only be Red, Green or Blue, sort the balls such that all the Red balls are grouped on the left side, all the Green balls are grouped in the middle and all the Blue balls are grouped on the right side. (Red is denoted by -1, Green is denoted by 0, and Blue is denoted by 1).

Examples

  • {0} is sorted to {0}
  • {1, 0} is sorted to {0, 1}
  • {1, 0, 1, -1, 0} is sorted to {-1, 0, 0, 1, 1}

Assumptions

  • The input array is not null.

Corner Cases

  • What if the input array is of length zero? In this case, we should not do anything as well.
public class Solution {
  public int[] rainbowSort(int[] array) {
    // Write your solution here
    if (array == null || array.length == 0) {
      return array;
    }
    int neg = 0;
    int pos = array.length - 1;
    int zero = 0;
    while (zero <= pos) {
        if (array[zero] == -1) {
          swap(array, zero++, neg++);
        } else if (array[zero] == 0) {
          zero++;
        } else {
          swap(array, zero, pos--);
        }
    }
    return array;
  }

  private void swap (int[] arr, int a, int b) {
      int tmp = arr[a];
      arr[a] = arr[b];
      arr[b] = tmp;
  }
}

 

以上是关于[Algo] 11. Rainbow Sort的主要内容,如果未能解决你的问题,请参考以下文章

NEAR Rainbow Bridge代码解析

Dapper学习 - Dapper.Rainbow - Read

Dapper学习 - Dapper.Rainbow - Update

IDEAL葵花宝典:java代码开发规范插件 Rainbow Brackets 插件

蓝桥杯 算法训练 ALGO-146 4-2找公倍数

算法通关手册 刷题笔记2 数组排序之冒泡排序选择排序