首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>正文

算法--"黑白逆"数组元素删除法

http://www.oklinux.cn  2005-10-30  来源: oklinux收集整理  frog      会员收藏  游客收藏  【 】 
"黑白逆"数组元素删除法
       
2005-10-28    yang_wm       点击: 137

最近在写程序的时候用到了删除数组元素的算法.

由于数组很大,用以前的算法,效率很低,

因此不得不想一个更好方法来解决数组元素删除算法.

我先举一个以前的数组元素删除算法的例子:

比如一个数组:int array[100] , i ;

for(i=0;i<100;i++)

array[i];

现在要删除array数组的元素, 那么最坏的情况下的时间复杂度为O(n^2);

比如要删除全部元素,时间复杂度就为O(n ^2);

最好的情况时间复杂度为:O(n );

删除一个元素的的时间复杂度为O(n );



我改进的算法思想:

顺序查找不要删除的元素,然后依次把他们放回数组中

比如数组a[10]={1,2,3......10};

我现在想删除 a[1]==2,和a[5]==6两个元素.

那就把a[0]=a[0];

a[1]=a[2];

a[2]=a[3];

a[3]=a[4];

a[4]=a[6];

a[5]=a[7];

a[6]=a[8];

a[7]=a[9];

看上面的左右数组元素, 左边是连续的,(a[0]......a[7]),而右边是除去a[1],a[5]的元素.

那么给两个指针p1,p2。P2负责查找不要删除的元素,p1负责记录当前元素移动所到的位置,

如果p2找到了不是删除的元素,那么就把p2所指的元素付给p1所指的位置上.

p1 p2

| |

V V

a[0]->a[1]->a[2]->a[3]->a[4]->a[5]->a[6]->a[7]->a[8]->a[9]
不管要删除的元素有多少个,最坏的情况下,时间复杂度都是O(n).
“黑白逆”是指要删除的元素是黑, 不删除的元素是白, 删除原本是对”黑”进行操作,而这种算法则是对不要删除的元素”白”进行操作,所以叫”黑白逆”数组元素删除算法.

杨威

上一篇:用gcc编译生成静态链接库*.a文件的方法。   下一篇:编程新时代-------java


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·用gcc编译生成静态链接库*.a文件的方法。
·编程新时代-------java
·用gcc编译生成动态链接库*.so文件的方法。
·为什么Java中继承是有害的
·编程技术 - 自制c语言编制cgi实现搜索功能
·算法-排序-快速排序法。
·编程技术 - 跨平台代码调试
·算法-排序-冒泡排序法2。
·c++经典
·算法-排序-冒泡排序法1。
·算法-排序-插入排序。
·C语言中库函数调用几例
·PHP高手之路
·算法--数据结构--图的多重邻接链表表示法
·加固PHP环境
·算法--数据结构--图的邻接链表表示法
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·J2EE综合:如何实现javabean的属性拷贝
·关于Java数据对象JDO 2.0查询语言的特
·Java源码分析:深入探讨Iterator模式
·Java基础知识:谈谈简单Hibernate入门
·漫谈Java程序的性能优化
·设计及设计模式--面向对象的思维方式
·数据库相关--Hibernate的事务和并发
·Java 安全--java程序开发的程序的保护
·浅析Java学习从入门到精通
·一个用JAVA写的测算服务器响应速度程序
·软件测试:软件测试的基础知识概要介绍
·Java SE6调用Java编译器的两种新方法
  阅读排行
·Linux 上的 WebSphere MQ 开发快速入门
·C/C++头文件一览
·C++视频教程《下载》
·AspectJ学习笔记之Pointcut
·用gcc编译生成动态链接库*.so文件的方
·使用AJAX技术实现网页无闪自动局部刷新
·c++ builder视频教程
·spring中对hibernate的支持程度分析
·设定执行Java程序的Linux安全环境
·在Fedora8系统下搭建JSP开发环境的方法
·Linux系统中安装JAVA JDK.6的方法
·算法-编译原理之词法分析器-状态机SM
·最新visual c++6.0视频教学
·算法--操作系统--3种页面置换算法
·C语言程序设计讲课视频
网摘收藏: