荷兰国旗
拿破侖席卷歐洲大陸之后,代表自由,平等,博愛的豎色三色旗也風靡一時。荷蘭國旗就是一面三色旗(只不過是橫向的),自上而下為紅白藍三色。
該問題本身是關于三色球排序和分類的,由荷蘭科學家Dijkstra提出。由于問題中的三色小球有序排列后正好分為三類,Dijkstra就想象成他母國的國旗,
于是問題也就被命名為荷蘭旗問題(Dutch National Flag Problem)。
該問題本身是關于三色球排序和分類的,由荷蘭科學家Dijkstra提出。由于問題中的三色小球有序排列后正好分為三類,Dijkstra就想象成他母國的國旗,
于是問題也就被命名為荷蘭旗問題(Dutch National Flag Problem)。
下面是問題的正規描述: 現有n個紅白藍三種不同顏色的小球,亂序排列在一起,請通過兩兩交換任意兩個球,使得從左至右,依次是一些紅球、一些白球、一些藍球。
參考july大神的教程,改寫成java版本
public static void swap(int nums[],int i,int j){if(i==j)return;nums[i]^=nums[j];nums[j]^=nums[i];nums[i]^=nums[j];}public static void sort(int nums[]){int current=0;int begin=0;int end=nums.length-1;while (current<end) {if(nums[current]==0){swap(nums, current, begin);current++;begin++;}if(nums[current]==1){current++;}if(nums[current]==2){swap(nums,current,end);end--;}}}public static void main(String[] args) {int nums[]={0,0,1,1,1,2,0,2,1,2};sort(nums);for (int i : nums) {System.out.print(i+",");}}時間復雜度:O(n)
空間復雜度:O(1)
總結
- 上一篇: QQ空间转移文章
- 下一篇: 如何编写单元测试用例