当前位置:首页 > 开发 > 编程语言 > 算法 > 正文

数组与排序算法

发表于: 2013-07-31   作者:海阔天空yqh   来源:转载   浏览:
摘要: 一、数组的定义       1.基本用法        Type arrayName[ ]        与C中不同的是,java在数组定义时并不为元素分配内存,而对于如上定义的数组我们是不能访问它的任何元素的。所以,我们需

一、数组的定义

      1.基本用法

       Type arrayName[ ]

       与C中不同的是,java在数组定义时并不为元素分配内存,而对于如上定义的数组我们是不能访问它的任何元素的。所以,我们需要用到运算符new为它分配内存空间。格式为:类型[ ] 数组变量名=new 类型[长度];

如:int[ ] ia=new int[10];

       值得注意的是,数组一旦定义,它的长度就会是固定的。另外,可通过“数组名.length”取得数组的长度;“数组名[下标值]”取得相应下标对应的取值。但数组的下标值是从0开始到数组长度-1,若超出此范围则越界报错。

       2.定义的三种方式

//仅定义一个某类型的数组变量,并没有指明数组对象,这时ia的值为null
int[] ia;
//将数组变量指向一个数组对象,数组中每个位置的默认值为0
ia=new int[5];//默认初始化法
//创建数组时就给数组中的元素赋值
String[] s=new String[]{"Chinese","Math","English"};//静态初始化法
//上句代码相当于以下几行代码
String[] s1=new String[3];
s1[0]="Chinese";
s1[1]="Math";
s1[2]="English";//动态初始化法

 二、两种常见易出现错误

       1.数组越界

       2.空指针异常

       虽说这两种错误相关的知识都已了解,但还是值得引起注意!

三、多维数组

        多维数组和一维数组的创建赋值都类似,可以这样理解:二维数组相当于就是一个数组里的每个元素又是一个数组,这样一来,多维数组就好理解多了。

练习:

了解了一下希尔排序,但是觉得希尔排序还不如冒泡,插入,选择排序简单,不过它也算是一种排序方法吧,下面来看看希尔排序:

//希尔排序
public static int[] shell(int[] x){
        //分组,每次对半分
	for(int increment =x.length/2;increment>0;increment/=2){
		//并从半分处与后边每个数相比
		for(int i=increment;i<x.length;i++){
	         	int temp=x[i];
	            	int j=0;
	            	for(j=i;j>=increment;j-=increment){//该循环对每个j只运行一次
		     		if(temp<x[j-increment]){
					x[j]=x[j-increment];
		                	System.out.println(i+"   "+j+"    "+(j-increment));
				}else{
					break;
				}
			}
			x[j]=temp;
			System.out.println(j);
	    	}
         }
         return x;
}

 导致我理解出错的地方在于第二个循环,没注意到此循环是从对半分处一直循环到数组最后一个元素。

另外,在练习中掌握了找出二维数组的最大值的方法:

//找出二维数组中的最大值
public static void Max(int[][] ib){
	int Max=ib[0][0];//假设数组的第一个元素值为最大值
	int value[]=new int[ib.length*ib[0].length];//考虑到可能存在多个最大值,用一个一维数组记录下来
	//循环比较
	for(int i=0;i<ib.length;i++){
		for(int j=0;j<ib[i].length;j++){
			if(ib[i][j]>Max){
				Max=ib[i][j];
				//由于新的最大值的出现,以前存有的所有最大值清空
				for(int m=0;m<=i;m++){
					for(int n=0;n<=j-1;n++){
						value[m*ib[0].length+n]=0;
					}
				}
				value[i*ib[0].length+j]=ib[i][j];//将目前最大值保存起来
			}else if(ib[i][j]==Max){
				value[i*ib[0].length+j]=ib[i][j];//把与暂存最大值相等的数存起来
			}
		}
	}
	for(int i=0;i<ib.length*ib[0].length;i++){
		if(value[i]==Max){
			ib[i/ib[0].length][i%ib[0].length]=value[i];//将一维数组保存的最大值还原成二维数组
			System.out.println("二维数组最大值所在位置为"+i/ib[0].length+i%ib[0].length+"最大值为"+Max);
		}
	}
}

 其间主要是要考虑到可能有多个最大值的同时存在,采用一维数组将可能的最大值暂存起来,当然还有另外更多更好的方法^_^

数组与排序算法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
import java.util.Arrays; /** * @author liuwang 插入和快速类似,希尔最快,可以讲比较互换的操作
快速排序 和归并排序一样,也是采用分治(Divide and Conquer)思想。分为三步: 分解:将数组A[p...q
举例说明: 拿第一个数分别与其他的数去比较,取出最大或最小,将结果放在第一个数中,然后在拿第二
u 数组的排序 这里我们介绍一些常用的排序方法, 排序是一个程序员基本功, 所谓排序就是对一组数据,
01./* 02.* Copyright (c) 2012, 烟台大学计算机学院 03.* All rights reserved. 04.* 作 者:杨蕾
01./* 02.* 程序的版权和版本声明部分 03.* Copyright (c)2012, 烟台大学计算机学院学生 04.* All r
/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserve
/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:隋 鑫 * 完成日期
/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserve
/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserve
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号