`
海阔天空yqh
  • 浏览: 5339 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

数组与排序算法

阅读更多

一、数组的定义

      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);
		}
	}
}

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

分享到:
评论

相关推荐

    数组与排序算法:从基础到进阶

    《数组与排序算法:从基础到进阶》是一本全面深入探讨数组基础知识和各种排序算法的实用指南。本书旨在为读者提供一个系统化的学习路径,从数组的基本概念开始,逐步深入到复杂的排序算法,帮助读者建立扎实的算法...

    数组以及排序算法

    在编程领域,数组和排序算法是基础且至关重要的概念,特别是在Java编程中。数组是一种数据结构,它允许我们在内存中存储相同类型的数据项,并通过索引来访问这些元素。理解数组和掌握高效的排序算法对于编写高性能的...

    易语言数组排序算法集合

    本资源“易语言数组排序算法集合”提供了多种常见的排序算法的源代码实现,对于学习易语言以及算法理解都有极大的帮助。下面将详细介绍其中提及的几种排序算法。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之...

    使用快速排序法对一维数组进行排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治策略,通过选取一个“基准”元素,将数组分为两个子数组,使得一个子数组的所有元素都小于或等于基准,另一个子数组...

    C语言中数组的排序算法.rar

    在`排序算法-插入法.c`文件中,遍历数组,对于每个元素,将其与前面已排序的元素逐个比较,找到合适的位置插入,保证插入后前一部分仍然是有序的。 5. **折半法排序(Binary Insertion Sort)** 折半法排序是对插入...

    xiabeifeng#study-notes#数组的排序算法1

    数组的排序算法选择法(交换法)排序: 在数组循环的过程中,比较当前元素值与当前元素之后的最大元素值的大小,如果当前元素值小于当前元素之后的最大元素值,则将当前

    易语言源码易语言数组排序算法集合源码.rar

    易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合...

    数组排序算法

    数组排序是计算机科学中基础且重要的概念,尤其是在数据处理和算法设计中不可或缺。数组是一种线性数据结构,其中元素按照特定顺序存储。排序数组是指将数组中的元素按特定规则(通常为升序或降序)重新排列的过程。...

    实验七 数组—排序算法和矩阵乘法.doc

    实验七的主题聚焦于数组,具体涉及排序算法(选择法和冒泡法)以及矩阵乘法。这些是计算机科学基础中的核心概念,特别是在数据处理和算法设计方面。 **排序算法** 1. **冒泡排序**:冒泡排序是一种简单的排序算法...

    数组排序数组排序数组排序数组排序数组排序

    标题和描述中提到了几种经典的数组排序算法,包括选择排序、冒泡排序和插入排序,这些都是数据结构与算法中的基础内容。接下来,我们将对这些排序算法进行详细的介绍和分析。 ### 选择排序 选择排序是一种简单直观...

    最快的排序算法 千万级亿级数组排序最快的实现方法,排序算法数据结构

    冒泡排序算法是一种简单的排序算法,它通过比较相邻元素的值来将数组排序。其时间复杂度为O(n^2),因此它在小规模数据中的应用是非常广泛的。但是,当数据规模很大时,冒泡排序算法的效率就会下降。 接下来,我们...

    c语言二维数组冒泡排序

    冒泡排序是一种简单的排序算法,通过重复遍历待排序的序列,交换相邻位置上的元素来达到排序的目的。在这个范例中,我们将探讨如何用C++或C语言实现对二维数组进行冒泡排序。 首先,我们要理解冒泡排序的基本原理。...

    C语言用分治法实现数组归并排序算法实现

    2.加深对分治法算法设计方法的理解与应用; 3.锻炼学生对程序跟踪调试能力; 4.通过本次实验的练习培养学生应用所学知识解决实际问题的能力。 问题: 输入N个数对其进行归并排序。 解决策略: 分治法策略:...

    二维数组如何进行冒泡排序

    ### 二维数组冒泡排序详解 #### 一、引言 冒泡排序是一种简单的排序算法,在数据处理领域有着广泛的应用。对于一维数组而言,冒泡排序实现起来...希望本文能够帮助初学者更好地理解二维数组排序的原理和实现细节。

    VBA80 26集VBA数组之VBA排序算法(下).exe

    VBA80 26集VBA数组之VBA排序算法(下)

    php 二维数组快速排序算法的实现代码

    二维数组排序算法与一维数组排序算法基本理论都是一样,都是通过比较把小的值放在左变的数组里,大的值放在右边的数组里在分别递归。 实例代码: &lt;?php class Bubble { private function __construct() { } ...

    易语言自定义数据类型数组排序

    本话题聚焦于“易语言自定义数据类型数组排序”,将深入探讨如何在易语言中创建、操作自定义数据类型数组,并实现各种排序算法,如根据产地、类别和售价等属性进行排序。 自定义数据类型在易语言中允许我们定义包含...

    java 部分数组递增排序

    在编程领域,数组排序是一个常见的任务,特别是在Java中。这里我们关注的是“部分数组递增排序”,这通常指的是对一个数组中的某一段元素进行升序排列。以下是对这个主题的详细解释。 首先,理解基本概念。数组是...

    c语言的基本算法 数组排序

    本篇内容将深入探讨C语言中的数组排序算法。 首先,数组排序是算法设计中常见的问题,它涉及到数组元素的重新排列,以达到特定的顺序,例如升序或降序。这里提到了两种基本的排序算法:筛选法(用于求素数)和选择...

    排序算法在不同数组状态下时间复杂度的比较

    本文将深入探讨五种常见的排序算法:堆排序、归并排序、选择排序、快速排序以及插入排序,并分析它们在不同数组状态下的时间复杂度。 1. **堆排序**: 堆排序是一种基于比较的排序算法,它利用了完全二叉树的特性...

Global site tag (gtag.js) - Google Analytics