您的位置:首页 > 职场人生

面试题11

2016-04-28 22:03 393 查看
三色球排序的问题:将相同的球放到一起,让你按顺序输出红白蓝三种颜色的球,可以用012来表示,要求只能扫描一次数组。

如:

输入 01012011022;

输出 00001111222;

思想:设定三个指针begin、current、end。初始化begin、current指向第一个,end指向最后一个。

current遍历整个序列,直到current>=end

(1)若current=1,不变;

(2)若current=0,交换begin,current++,begin++;

(3)若current=2,交换end,end–;

#include<stdio.h>
#define N 10

int main() {
int A[] = { 1,1,2,1,1,1,1,1,1,1 };

int begin, current, end,t;

for (begin = 0, current = 0, end = N - 1; current<end; current++) {
if (A[current] == 0) {
t = A[current];
A[current] = A[begin];
A[begin] = t;
begin++;
current++;
}
else if (A[current] == 1)
continue;
else if (A[current]== 2) {
t = A[current];
A[current] = A[end];
A[end] = t;
end--;
}
}

for (int i = 0; i < N; i++) {
printf("%d  ", A[i]);
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: