方法1 快排partition——数字相对顺序会变化
循环不变式: [0…i – 1]都是*, [i…j – 1]是数字,[j…n – 1]未探测
for (int i = 0, j = 0; j < n; ++j)
if (s[j] == ‘*’) swap(s[i++], s[j]);
样例 0124
i=0, j = 0, 0124 交换s[0],不变,i = 1
i=1, j = 1, 0124 不变
i = 1, j = 2, 0124 不变
i=1, j = 3, 交换s[1],s[3]变为 1024 并且i = 2
i=2, j = 4,**1024不变
i = 2, j = 5, 交换s[2],s[5]变为*0214 且i = 3
再往后没变化了
方法2 数字相对顺序不变
“倒着”
int j = n – 1;
for (int i = n – 1; i >= 0; --i)
if (isdigit(s[i])) s[j–] = s[i];
for (; j >= 0; --j) s[j] = ‘*’;