给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求:
1. 排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变
2. 不能使用额外存储空间
例子如下:
输入 0, 3, 0, 2, 1, 0, 0
1. 排序后所有0元素在前,所有非零元素在后,且非零元素排序前后相对位置不变
2. 不能使用额外存储空间
例子如下:
输入 0, 3, 0, 2, 1, 0, 0
输出 0, 0, 0, 0, 3, 2, 1
分析:
从数组最后开始往前遍历,遇到为0的,就往前找不为0的元素与之交换,如果找不到不为0的元素,那前面都是0,可以返回了。
实现如下:
void Arrange(int* a, int n)
{
int k = n -1 ;
for (int i = n -1; i >=0; --i)
{
if (a[i] == 0)
{
for (int j= i-1; j>=0; j--)
{
if (a[j]!=0)
{