算法--三色排序(经典的荷兰国旗问题) 三色排序 第17节 三色排序练习题 有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class ThreeColor { 4 public int[] sortThreeColor(int[] A, int n) { 5 int zeroAreaIndex = -1;//0区域当前最后位置 6 int twoAreaIndex = n;//2区域当前最前位置 7 for(int i=0; i<A.length; ){ 8 if(A[i] == 1) i++; 9 else if(A[i] == 0){ 10 swap(A, ++zeroAreaIndex, i);//当前位置为0,和0区域的下一个位置进行交换(0 0 0 1 0 2 0 1) 11 i++; 12 } 13 else{//当前位置为2,那么和2区域的前一个位置进行交换(0 0 0 1 2 1 1 1 0 2) 14 swap(A, --twoAreaIndex, i); 15 if(i == twoAreaIndex) break; 16 /** 17 * 此时从2区域前方交换到了当前i位置,不知道2区域前方这个数是1还是2还是0? 18 * 如果是1的话,i++,继续下一次循环; 19 * 如果是0或者2的话,i保持不变 20 */ 21 if(A[i] == 1) i++; 22 else continue; 23 } 24 if(i == twoAreaIndex) break; 25 } 26 return A; 27 } 28 29 public void swap(int[] arr, int m, int n) { 30 int temp = arr[m]; 31 arr[m] = arr[n]; 32 arr[n] = temp; 33 } 34 } 您的代码已保存答案正确:恭喜!您提交的程序通过了所有的测试用例 posted on 2017-03-11 22:58 日月的弯刀 阅读(1578) 评论(0) 编辑 收藏 举报 相关文章: