本文主要是介绍整数数组0元素后移,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:如下:int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)。
思路:计算0元素个数count,将非零元素向前移动,最后数组末尾填充count个0
#include "stdafx.h" #include <iostream>using namespace std;int Func(int *A, int nSize) {if (NULL == A || nSize <= 0){return -1;}int count = 0;int pos = -1;for (int i = 0; i < nSize; i++){if (-1 == pos && A[i] == 0){pos = i;count++;}else if (A[i] == 0){count++;}else{for (int j = 0; j < count; j++){A[i - j - 1] = A[i - j];}}}for (int i = count; i > 0; i--){A[nSize - i] = 0;}return pos; }int _tmain(int argc, _TCHAR* argv[]) {int A[] = {6 ,0 ,3, 4, 0, 5, 9, 6, 4, 6, 5, 8, 0, 0};int nSize = sizeof(A)/sizeof(A[0]);cout<<"before: ";for (int i = 0; i < nSize; i++){cout<<A[i]<<" ";}int pos = Func(A, nSize);cout<<endl<<"after: ";for (int i = 0; i < nSize; i++){cout<<A[i]<<" ";}cout<<endl<<"原数组第一个0元素的下标为: "<<pos<<endl;cout<<endl;return 0; }
运行界面如下:
这篇关于整数数组0元素后移的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!