要求在遍历一遍的情况下完成排序。 由于只有三种元素,我们完全可以在遍历的同时维护两个指针分别代表0和2的个数,将遍历到的每个0放在数组前面,2放在数组后面并更新0或2的个数即可,这样在保证遍历到了每个元素的时候就可以实现要求的排序。 试想,当扫描到0时,需要将其与之前的元素交换,交换得到的元素肯定被遍历过;扫描到1时,继续,则该元素也被遍历过;扫描到2时要和之后的元素交换,交换的道德元素没被遍历过,应继续扫描这个元素直到其为0或1或是扫描完全部元素为止。
public class Solution {
public void sortColors(int[] A) {
int l = A.length;
if( l == 0 )
{
return ;
}
int st = 0,ed=l-1,i=0;
while(i<=ed)
{
if(A[i]==0)
{
A[i] = A[st];
A[st] = 0;
++st;
++i;
}
else if( A[i]==1)
{
++i;
}
else
{
A[i] = A[ed];
A[ed] = 2;
ed--;
}
}
return ;
}
}
本文介绍了一种在遍历一遍数组的情况下实现0、1、2三种元素的排序算法。通过使用两个指针分别记录0和2的数量,并在遍历过程中实时调整它们的位置,实现了高效的排序效果。
138

被折叠的 条评论
为什么被折叠?



