C 不改变顺序,原址剔除数组中的0元素
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h> #define NUM_CNT 10000000
#define FILE_NAME "num.txt" void genNumber()
{
int i = ;
int *arr = (int*)malloc(sizeof(int) * NUM_CNT);
for(;i < NUM_CNT; ++i)
{
arr[i] = i;
}
FILE *fp = fopen(FILE_NAME,"w");
if(NULL == fp){printf("open %s failed\n",FILE_NAME);}
for(i = ;i < NUM_CNT; ++i)
{
if(i% == ){arr[i] = ;}
fprintf(fp,"%d ",arr[i]);
}
fclose(fp);
} void readNum(int arr[])
{
int i = ;
FILE *fp = fopen(FILE_NAME,"r");
if(NULL == fp){printf("open %s failed\n",FILE_NAME);}
for(i = ;i < NUM_CNT; ++i)
{
fscanf(fp,"%d ",&arr[i]);
}
fclose(fp);
} void dump(int *arr)
{
int i = ;
for(i = ;i < NUM_CNT; ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
} void del(int *arr,int len)
{
int i = ,j = ,t = ;
for(; i < len - ; ++i)
{
if(arr[i] == )
{
j = i + ;
while(j < len && arr[j]==)++j;
if(j < len)
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
} void del1(int *arr,int len)
{
int i = ,j = ,t = ;
while(j < len && arr[j]==)++j;
if(j == len )return;
for(; i < len - && j < len; ++i)
{
if(arr[i] == )
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
while(j < len && arr[j]==)++j;
}
}
} int main()
{
int t = ;
int *arr= (int*)malloc(sizeof(int) * NUM_CNT);
genNumber();
readNum(arr);
//dump(arr);
t = clock();
del1(arr,NUM_CNT);
printf("use time:%lu ms\n",clock() - t);
//dump(arr);
return ;
}
C 不改变顺序,原址剔除数组中的0元素的更多相关文章
- C语言  ·  删除数组中的0元素
		
算法提高 6-9删除数组中的0元素 时间限制:1.0s 内存限制:512.0MB 编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动.注意,C ...
 - 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素
		
/** * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 能够假定数组元素原先是按从小到大的顺序排列的. */ /** * 思路:数组 ...
 - Java 向数组中添加一个元素
		
方法 一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度. 向数组中添加元素思路: 第一步:把 数组 转化为 集合 list = Arrays.asList(array); 第二 ...
 - ES6数组中删除指定元素
		
知识点: ES6从数组中删除指定元素 findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. arr.splice(arr.findIndex(item => ...
 - LeetCode#26 | Remove Duplicates from Sorted Array 删除有序数组中的重复元素
		
一.题目 Description Given a sorted array, remove the duplicates in-place such that each element appear ...
 - 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余	位置存的是‘#’;输出这个数组中的所有元素。
		
//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10 ...
 - 在主方法中定义一个大小为50的一维整型数组,数组i名为x,数组中存放着{1,3,5,…,99}输出这个数组中的所有元素,每输出十个换一行
		
package hanqi; import java.util.Scanner; public class Test7 { public static void main(String[] args) ...
 - (转载)PHP删除数组中的特定元素的代码
		
(转载)http://www.jb51.net/article/30689.htm 我们知道,PHP没有提供专门删除一个特定数组元素的方法.但是可以通过unset()函数来完成这种要求比如下面的程序: ...
 - [jstips]向数组中插入一个元素
		
向现有数组中插入一个元素是经常会见到的一个需求.你可以: 使用push将元素插入到数组的尾部: 使用unshift将元素插入到数组的头部: 使用splice将元素插入到数组的中间: 上面那些方法都是常 ...
 
随机推荐
- HealthKit开发快速入门教程之HealthKit数据的操作
			
HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...
 - 递推DP URAL 1119 Metro
			
题目传送门 /* 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 递推DP:仿照JayYe,处理的很巧妙,学习:) 好 ...
 - HDU2204 Eddy's爱好(容斥原理)
			
题目问[1,n]有几个数是$m^k (k>1)$形式. 如果这样考虑,m已知k未知,对于每一个m统计其k的数量即$\lfloor log_mn \rfloor$个,再容斥,然而m太多了,完全不可 ...
 - HDU2841 Visible Trees(容斥原理)
			
题目..大概就是有个m*n个点的矩形从(1,1)到(m,n),问从(0,0)出发直线看过去最多能看到几个点. 如果(0,0)->(x,y)和(0,0)->(x',y')两个向量平行,那后面 ...
 - 素数环问题[XDU1010]
			
Problem 1010 - 素数环问题 Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 972 Acc ...
 - vi/vim键盘图-----又一张桌面背景好图
			
也许还是有很多人不能愿意用CLI的vi/Vim来写东西,不过,当你真的习惯了,它的高效性就是不可估量了.下面的这张图,一看就明白了,从此,学习变的不再艰难^_^ 补注: 图中没有关于查找和替换的,应该 ...
 - EnableViewState=“false”不能乱用啊
			
有时候页面源文件里有一段看上去像乱码的代码,这时候为了加快页面的加载速度,可以使用EnableViewState=“false”,这时候页面上的乱码就会消失了.但是,关于这个问题作者郁闷了好久,之前为 ...
 - [转].net自定义验证控件CustomValidator的使用
			
本文转自:http://tech.cncms.com/web/aspnet/96310.html CustomValidator验证控件,可以自定义验证函数,实现其它几个验证控件不能实现的验证规则,最 ...
 - 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)
			
(关于字符编码的深入解释,请参见我的原创文章<关于字符编码,你所需要知道的>.) 此文为转载,有少许修订,原文出处不详. 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...
 - 简单的form表单操作(Servlet)
			
Servlet模型 [表单的处理][模型(1)] ●HTML网页 <!DOCTYPE html> <html> <head> <meta charset=&q ...