1. 荷兰旗问题 Sort Colors
Given an array with n objects colored red, white or blue, sort them so that
objects of the same color
are adjacent, with the colors in the order red,
white and blue.
Here, we will use the integers 0, 1, and 2 to represent the
color red, white, and blue respectively.
Note:
You are not suppose to
use the library‘s sort function for this problem.
Follow up:
A rather
straight forward solution is a two-pass algorithm using counting sort.
First, iterate the array counting number of 0‘s, 1‘s, and 2‘s, then overwrite
array with
total number of 0‘s, then 1‘s and followed by 2‘s.
Could you
come up with an one-pass algorithm using only constant space?
Solution: 0 0 0 1 1 1 1 ...... 2 2 2 2
|
| |
zero
i two
-> ->
<-
1 class Solution { 2 public: 3 // 1 0 0 2 1 0 2 0 1 1 2 4 void sortColors(int A[], int n) { 5 int start = 0; 6 int end = n - 1; 7 int i = 0; 8 while(start <= i && i <= end) { 9 if(A[i] == 0) { 10 swap(A[i], A[start]); 11 start++; i++; 12 } 13 else if (A[i] == 2) { 14 swap(A[i], A[end]); 15 end--; 16 } 17 else { 18 i++; 19 } 20 } 21 } 22 };
Leetcode个人总结6 Sort问题(1),布布扣,bubuko.com
原文:http://www.cnblogs.com/zhengjiankang/p/3600055.html