int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序
来源:互联网 发布:腾讯视频 for mac 编辑:程序博客网 时间:2024/05/22 11:51
解:
思路1:不知道这里的有序是什么个意思。是按照大小有序,还是按原来先后顺序有序。如果是原来先后顺序有序的话。只需要一次遍历,将为0的元素填充为后面第一个不为0 的元素,然后将不为0的元素置0即可。
- int Func(int *a, int nSize){
- assert(a != Null && nSize > 0);
- int index;
- int i, j;
- i = 0;
- j = 0;
- while (i < nSize && a[i] != 0 ) ++i;
- if ( i >= nSize)
- return -1;//没有0
- else{
- index = i;
- j = i + 1;
- }
- while(i < nSize && j < nSize){
- // 寻找0元素
- while (i < nSize && a[i] != 0 ) ++i;
- // 找i位置后第一个不是0的元素
- while (j < nSize && a[j] == 0 ) ++j;
- if (i < nSize && j < nSize){
- a[i++] = a[j];
- a[j++] = 0;
- }
- }
- return index;
- }
思路2:借用快速排序思想,设两指针low和high,分别指向数组头和尾。low指针从前往后扫描为0的元素,high指针从后往前扫描不为0的元素然后交换,当low<high时结束,此时high指针指向不为0元素中的最后一个。然后对a[0..high]进行从大到小排序。
- int Func(int *a, int nSize){
- // 将零元素移到数组尾部
- int low = 0;
- int high = nSize - 1;
- int firstIndex;
- bool isFirst = true;
- while (low <= high){
- while (low <= high && a[high] == 0)
- --high;
- while (low <= high && a[low] != 0)
- ++low;
- if (isFirst) { firstIndex = low; isFirst = false; }
- if (low <= high){ a[low] = a[high]; a[high] = 0; }
- }
- // 将前面的非零元素排序
- int dk = nSize / 2;
- int t;
- while(dk >= 1){
- for (int i = dk; i <= high; ++i){
- if (a[i] < a[i-dk]){
- t = a[i];
- for (int j = i - dk; j >=0 && t < a[j]; j -= dk)
- a[j+dk] = a[j];
- a[j+dk] = t;
- }//if
- }//for
- dk /= 2;
- }//wh
思路三:
#include "iostream"using namespace std;int func(int* A,int sizeN){for(int i=0;i<sizeN;i++){while (*(A+i)!=0){i++;}int j=i;while ((j<sizeN)&&(*(A+j)==0)){j++;}if((j>i)&&(i<sizeN)&&(j<sizeN)){swap(*(A+i),*(A+j));}}return 0;}int main(){int DATA[16] = {0,1,0,0,3,4,5,0,0,0,0,10,99,32754,0,0}; func(DATA,16);for(int i=0;i<16;i++)cout<<DATA[i]<<endl;return 0;}
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至 数组前面并保持有序,返回值为原数据中第一个
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至后面
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至
- 写一个函数int Func(int* A, int nSize), 使A把0移至后面,非0整数移至数组前面 并保持有序,返回值为原数据中第一个元素为0的下标。
- 上海华为的一道关于指针方面的编程题 int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize)
- 面试编程题---其中隐藏着若干0,其余非0整数,使A把0移至后面,非0整数移至数组前面并保持有序
- int a = (int)(((int*)0)+4);
- 给定一个数组,数组中包含若干个0,将0移至数组前面,其余的相对顺序保持不变
- C++中纯虚函数virtual func(int a, int b)=0;
- 201111621401-白乐乐-判断一个正整数是否为质数的算法。函数签名如下 int isPrime(long a) 输入:一个长整数a 输出:返回1(为质数),返回0(非质数)
- int (*a)(int) ; int (*a[10])(int); int *(*a)(int) ;
- int a = 0 与 int a(0) int a(b)
- int (*a[]) () 指针数组函数
- 将数组A中的0都移至数组末尾,将非0的移至开始(保持原来顺序)例子:1,2,0,2,3,0-->1,2,2,3,0
- 数组初始化问题:int a[3]={0}和int a[3]={1}的区别
- int a; int* a; int** a; int (*a)[10]; int (*a)(int);int *(*a)[10]区别?
- int a; int* a; int** a; int a[10]; int (*a)[10]; int (*a)(int); 区别
- C++ Primer笔记(10)
- DNA matching匹配问题
- 用Google Code协作开发管理项目——TortoiseSVN的使用
- const指针
- const的一点总结
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序
- Biker's Trip Odomete
- Software Code Areas【1009】-每日一译
- Substring子序列
- 2012.10.08 安卓游戏开发笔记(十二)_Bitmaps的位图渲染于操作
- linux chkconfig命令参数及用法详解
- 几种打开新页面传递参数的例子
- tar命令
- gcc 编译及动态库和静态库