> For the complete documentation index, see [llms.txt](https://ucan.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ucan.gitbook.io/notes/75.-sort-colors.md).

# 75. Sort Colors

{% hint style="info" %}
One pass: quick sort!
{% endhint %}

```java
class Solution {
    public void sortColors(int[] nums) {
        int pivot1 =0;
        int pointer =0;
        int pivot2 = nums.length-1;
        
        while(pointer<=pivit2){
            if(nums[pointer]==0){
                swap(nums, pointer, pivit1);
                pointer++;
                pivit1++;
            }else if(nums[pointer]==2){
                swap(nums, pointer, pivit2);
                pivit2--;
            }else{
                pointer++;
            }
        }
    }
    private void swap(int[] nums, int i, int j){
        int temp=nums[i];
        nums[i]=nums[j];
        nums[j]=temp;
    }
}
```

{% hint style="info" %}
two pass
{% endhint %}

```java
class Solution {
    public void sortColors(int[] nums) {
        int[] memo= new int[3];
        
        for(int i : nums){
            memo[i]++;
        }
        
        helper(nums, 0, memo[0], 0);
        helper(nums, memo[0], memo[1],1);
        helper(nums, memo[0]+memo[1], memo[2], 2);
    }
    
    private void helper(int[] nums, int start, int count, int target){
        for (int i=start; i<start+count; i++){
            nums[i]=target;
        }
    }
}
```
