颜色分类(Java)

    科技2024-12-18  11

    给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

    注意: 不能使用代码库中的排序函数来解决这道题。

    示例: 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2]

    package com.loo;

    import java.util.Arrays;

    public class ColorGroup {

        private static final int RED = 0;     private static final int WHITE = 1;     private static final int BLUE = 2;     public static void main(String[] args) {         int[] array = new int[] { BLUE , RED , WHITE , WHITE , BLUE , RED , RED , RED , BLUE , BLUE , WHITE };         System.out.println(Arrays.toString(array));         sortColors(array); // sortColors2(array);         System.out.println(Arrays.toString(array));     }

        public static void sortColors(int[] colors) {         if (colors == null || colors.length == 0) {             return;         }         int len = colors.length;         int c0 = 0;         int c1 = 0;         int c2 = 0;         for (int i=0;i<len;i++) {             if (colors[i] == RED) {                 c0++;             } else if (colors[i] == WHITE) {                 c1++;             } else {                 c2++;             }         }         for (int i=0;i<len;i++) {             if (i<c0) {                 colors[i] = RED;             } else if (i>=c0 && i<(c0+c1)) {                 colors[i] = WHITE;             } else {                 colors[i] = BLUE;             }         }     }

        public static void sortColors2(int[] colors) {         if (colors == null || colors.length == 0) {             return;         }         int len = colors.length;         quickSort2(colors , 0 , len-1);     }

        // 三向切分的快速排序     public static void quickSort2(int[] arr , int low , int hight) {         if (low >= hight) {             return;         }         int lt = low;         int gt = hight;         int i = low + 1;         int temp = arr[low];         while (i<=gt) {             if (temp > arr[i]) {                 swap(arr , lt++ , i++);             } else if (temp < arr[i]) {                 swap(arr , i , gt--);             } else {                 i++;             }         }         quickSort2(arr , low , lt - 1);         quickSort2(arr , gt + 1 , hight);     }

        public static void swap(int[] colors , int a , int b) {         int temp = colors[a];         colors[a] = colors[b];         colors[b] = temp;     } }

     

     

    Processed: 0.017, SQL: 8