- 浏览: 93177 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
bighero3:
很好。值得收藏
论坛数组排序方法总结 -
shellfish:
其实可以在解压后用 yum localinstall ./*. ...
centos-安装openoffice -
lwcheng1985:
hareamao 写道断言是自1.4引入的关键字,似乎用起来不 ...
jdk1.6拾遗之assert,TreeSet -
hareamao:
断言是自1.4引入的关键字,似乎用起来不爽,所以很少在代码中出 ...
jdk1.6拾遗之assert,TreeSet -
80705041:
多谢楼主啦,很实用~!!
Myeclipse8.5中svn插件安装方法总结
原题:
有一个整数数组,有很多 个元素,如何把零移到最前面,要求算法效率要高。如 0,1,72,3,0,5,9,0,6,51,0,3。移动后为0,0,0,0,1,72,3,5,9,6,51,3。不知JE的牛人们有什么高效的算 法。
补充: 非零元素的位置不能改变的。
地址: http://www.iteye.com/topic/684511
本人笨拙:
1、 自己写的算法:利用数组copy,倒序插入。论坛上也有哥们提到过此算法。代码如下
public class test8 {
public static void main(String...strings){
int[] arr1={0,1,72,3,0,5,9,0,6,51,0,3};
int[] arr2=new int[arr1.length];
int index1=arr1.length;
int index2=arr1.length;
while(index1>0){
if(arr1[--index1]!=0){
arr2[--index2]=arr1[index1];
}
}
for(int i=0;i<arr1.length;i++){
System.out.print(arr2[i]+",");
}
}
}
分析:个人感觉速度上可以,占用空间。其中倒序思路与数组紧凑法类似。
2.
数组紧凑法:学习中。。
public class test9 {
private static int[] array={0,1,72,3,0,5,9,0,6,51,0,3};
public static int[] move(int [] array)
{
//自右向左扫描,将所有非零元素紧凑到右侧
int low,high;
for(low = array.length-1,high=low ; low>=0;low--)
if(array[low]!=0)
{
array[high] = array[low];
high -- ;//更新紧凑序列的最左侧元素
}
//将余下所有元素全部置为0
for(;high>=0 ; high--)
array[high] = 0;
return array;
}
public static void main(String...strings){
move(array);
for(int i=0;i<array.length;i++){
System.out.print(array[i]+",");
}
}
}
3:
public class test10 {
private static int[] array = { 0, 1, 72, 3, 0, 5, 9, 0, 6, 51, 0, 3 };
static void frontzero(int array[]) {
int zero = array.length - 1, nozero = zero;
while (nozero >= 0) {
if (array[zero] == 0 && array[nozero] != 0) {
array[zero] = array[nozero];
array[nozero] = 0;
zero--;
}
if (array[zero] != 0)
zero--;
if (array[nozero] == 0)
nozero--;
if (zero < nozero)
nozero = zero - 1;
}
}
public static void main(String... strings) {
frontzero(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + ",");
}
}
}
方法 4
public class test11 {
/**
* @param args
*/
public static void main(String[] args) {
int[] array = new int[] { 0, 1, 72, 73, 0, 5, 9, 0, 6, 51, 0, 0 };
array = moveZero(array);
for (int k = 0; k < array.length; k++) {
System.out.print(array[k]+",");
}
}
/**
* 从右边边开始找零,如果找到0,就把前面的元素都往后面挪一个位置,并且第一个元素补零,没有的话,就往左边找,理论上需要循环 length-
* zeroNum 次
*
* @param array
* @return
*/
public static int[] moveZero(int[] array) {
// 统计零的个数
int zeroNum = 0;
for (int i = array.length - 1; i > 0;) {
if (array[i] == 0) {
zeroNum++;
// 零前面的元素都往后面移动下
for (int j = i; j > 0; j--) {
array[j] = array[j - 1];
}
// 移动完后,前面补零
array[0] = 0;
if (i < zeroNum) {
// 说明前面的都是0了,不用再找了
break;
}
} else {
// 没有为零,移动下标,再往前找
i--;
}
}
return array;
}
}
方法 5
public class test12 {
public static void main(String[] args)
{
int[] array = new int[] { 0, 1, 72, 3, 0, 5, 9, 0, 6, 51, 0, 3, 0, -5, 9, 0, 8, -34, 0, -1 };
int first = 0;
System.out.println(Arrays.toString(array));
for (int i = 0; i < array.length; i++)
{
if (array[i] == 0)
{
if (first < i)
{
for (int j = i - 1; j >= first; j--)
{
array[j + 1] = array[j];
}
array[first] = 0;
first++;
}
}
}
System.out.println(Arrays.toString(array));
}
}
下班了,就现不错分析了,先mark下,等回头再总结下。上面的代码中感觉有冒泡和快速的思想在里面
上面的算法有好有坏,不做分析。关键是学习大家思路。不同的场景应用不同的算法会更高效。
发表评论
-
jvm原理及部分配置
2010-08-03 09:40 1265Java语言引入了Java虚拟 ... -
jdk拾遗 Resource
2010-07-26 14:29 825public @interface ResourceResou ... -
jdk 拾遗 URL.URI ,HttpURLConnectionextends
2010-07-26 13:38 1341public abstract class HttpURLCo ... -
jdk拾遗之ThreadGroup
2010-07-26 10:57 804public class ThreadGroupextends ... -
eclipse-下安装svn插件
2010-07-20 11:34 18301,用links方法进安装 1. 从subclipse官方网站 ... -
eclipse 无法启动 JVM terminated. Exit code=-1
2010-07-15 11:47 784eclipse 无法启动 JVM terminated. Ex ... -
Jdk拾遗-StringBuffer与StringBuilder
2010-07-14 14:21 641public final class StringBuffer ... -
数据库命名规范(转)
2010-07-13 10:58 1022转自(http://blog.csdn.net/Edwardd ... -
java-jdk拾遗-list,iterator,enum
2010-07-05 17:15 1018List 如果 List 允许进行 ... -
ava-jdk拾遗-Set
2010-07-05 17:06 780Set java.util 接口 Set<E> ... -
ava-jdk拾遗-Map
2010-07-05 16:27 826Map: Map 接口提供三种coll ... -
java-jdk拾遗1
2010-06-30 14:42 8391.TreadLocal 该类提供了线 ... -
配置java环境变量
2010-06-22 09:55 3956配置java环境变量 (转自:http://blog.csdn ... -
Myeclipse8.5中svn插件安装方法总结
2010-06-22 09:29 16202方法总结 方法一:在线安装 1.打开HELP-> ... -
数据库设计字段-null备注
2010-06-13 10:10 1278在工作中,设计数据库难免会出现各种缺陷,例如产生null字段, ... -
论坛面试题mark
2010-06-03 09:24 902刚在论坛上看到http://www.iteye.com/top ... -
从架构差异看Web高性能开发
2010-04-26 15:34 712从架构差异看Web高性能开发 转自:http://blog. ... -
Extjs错误集合
2010-04-15 14:22 789Ext is not defined 错误 1.引用顺序 ... -
Servlet生命周期
2010-03-05 16:37 652转自:http://book.51cto.com/ ... -
Socket例子和数据库链接
2010-03-02 12:19 2017服务端: package com.test.dp; imp ...
相关推荐
C语言数组排序总结
Java数组排序总结(冒泡_选择_插入_希尔)__递归算法的复杂度,实用
首先接触的就是PHP数组排序、降序的排序问题。sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。 rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新...
在php中数组排序一直是一个老生常谈的问题,下面我们来集中讲一下关于在php中一维数组与二维数组排序的实现程序,相信对大家有一定的参考借鉴价值. 功能:对数组进行重新排序. 说明:冒泡排序 (一维数组)(二维数组某个...
我自己总结的 .C语言数组排序小结
数组排序的各种算法,包括基数排序,快速排序,插排等
开发中,遇到数组排序的需求很频繁,这篇文章会介绍几个常见排序思路。 一、希尔排序(性能最好) 如果要从大到小排列,则 while(arr[n] > arr[n – interval] && n > 0) 。 // 希尔排序算法 function xier(arr){ ...
sort函数怎么使用的总结
第五单元包括十个单元,分别是一维数组的定义、一维数组的输入与输出、一维数组的插入删除、一维数组的查找统计、一维数组的元素排序、一维数组的应用举例、二维数组的定义与操作、二维数组的应用举例、数字方阵、...
数组常用方法总结: 下面我只总结了es3中常...2个数组排序方法:reverse()、sort() 连接数组的方法: 1、concat() 作用:连接两个数组,合并为一个新数组。 用法:arr1.concat(arr2,arr2…) 示例: [removed]
本文实例总结了JS数组排序技巧。分享给大家供大家参考,具体如下: ① 冒泡排序 bubbleSort:function(array){ var i = 0, len = array.length, j, d; for(; i<len; i++){ for(j=0; j<len; j++){ if(array[i] ...
用Java写的插入排序, 对一维整型数组进行插入排序。 一个类。
包括代码和总结部分
由于最近都在freecodecamp上刷代码,运用了很多JavaScript数组的方法,因此做了一份关于JavaScript教程的整理,具体内容如下: 一、普通方法 1、join() 将数组元素连接在一起,并以字符串形式返回 参数:可选,指定...
合并数组并且转为有序去重集合,我看到很多资源博客,百度都弄的很繁琐,所以自己总结描述了一下
数组总结(概念、定义、默认值、可变长参数、值传递与引用传递等)。1.冒泡排序: 两两相比(两个相邻的数进行比较) 条件成立 互换位置 外层循环控制比较的轮数 **轮数永远是 长度 -1 (n - 1)** 内层循环...
本文实例讲述了JavaScript实现获取两个排序数组的中位数算法。分享给大家供大家参考,具体如下: 题目 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2...分析:用数组排序方法轻松解决 JS代码: var findMedianSo