// 在O(n)时间内把数组中的0移到数组前面,其他数字移到数组后面,并保持相对顺序.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
/*
Given an Array With random 0s and non 0 numbers, shift all the 0s to the beginning and non 0s to the rear.
Eg: 1,9,8,4,0,0,2,7,0,6,0
Out put 0,0,0,0,1,9,8,4,2,7,6
i.e order of numbers not to change. Do it in place
*/
void resortArray(int A[], int len)
{
int *pZero;
int *pNum;
pZero = pNum = A+len-1;
// find the first position of 0 (from right to left)
while (*pZero != 0)
pZero--;
// find the first position of !0 (from right to left)
pNum = pZero-1;
while (*pNum == 0)
pNum--;
while (pZero >= A && pNum >= A)
{
*pZero-- = *pNum;
*pNum-- = 0;
while (*pZero != 0 && pZero >= A)
pZero--;
while (*pNum == 0 && pNum >= A)
pNum--;
}
}
void printArray(int A[], int len)
{
for (int idx = 0; idx < len; idx++)
{
printf("%d ", A[idx]);
}
printf("\r\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
int Arr[] = {10,44,0,0,3,0,0,5,1,9,8,4,0,0,2,7,0,6,11,12,13};
int arrLen = sizeof(Arr)/sizeof(Arr[0]);
printArray(Arr, arrLen);
resortArray(Arr, arrLen);
printArray(Arr, arrLen);
return 0;
}
把数组中的0移到数组前面,其它数字移到后面,并且保持数字间的相对顺序
最新推荐文章于 2021-09-22 15:08:27 发布