[算法题:快排(一)]颜色分类
1->题目链接
算法题:颜色分类
2->题目解析
数字0表示红色,数字1表示白色,数字2表示蓝色.
这到题说白了就是让我们进行排序,数组中只会有 0 1 2 三种数字
3->算法原理
类⽐数组分两块的算法思想,这⾥是将数组分成三块,那么我们可以再添加⼀个指针,实现数组分三块。
设数组⼤⼩为 n ,定义三个指针 left, i, right : ◦ left :⽤来标记 0 序列的末尾,因此初始化为 -1 ; ◦ i :⽤来扫描数组,初始化为 0 ; ◦ right :⽤来标记 2 序列的起始位置,因此初始化为 n ; 在 i 往后扫描的过程中,保证:
◦ [0, left] 内的元素都是 0 ;◦ [left + 1, i - 1] 内的元素都是 1 ;
◦ [i, right - 1] 内的元素是待定元素;
◦ [right, n] 内的元素都是 2 ;
当循环结束之后:
[0, left] 表⽰ 0 序列;
[left + 1, right - 1] 表⽰ 1 序列;[right, numsSize - 1] 表⽰ 2 序列;