`
guanxianxiao
  • 浏览: 19842 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

对数组的个人理解

阅读更多
数组定义:数组可以理解为一个具有连续空间的容器,在其中可以放一些类型相同的东西,如:相同类型的数,相同类的对象,

数组的特点:1、连续空间
2、类型固定
3、空间大小固定

数组的定义方式:
1、 数组类型 []  数组名 = new 数组类型[数组长度];(一维)
       数组类型 [][]  数组名 = new 数组类型[行][列];(二维)
   ····
   ···
2、数据类型  [] 数组名  = {值,值,····};
      数据类型  [][] 数组名  = {{值,值},{值,值},····};
   ····
   ···
3、数据类型 [] 数组名;
   数组名 = new 数据类型[数组长度];
  
   注:不能用     数组名 = {值···};
  
4、数据类型  []  数组名 =new 数据类型[]{值,值,···};

练习:1.数组排序,每组每一个人都要实现一种排序方法(冒泡除外)
a) 插入排序:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

1、从第一个元素开始,该元素可以认为已经被排序

2、取出下一个元素,在已经排序的元素序列中从后向前扫描

3、如果该元素(已排序)大于新元素,将该元素移到下一位置

4、重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

5、将新元素插入到该位置中

6、重复步骤2

b) 选择排序
首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

c) 快速排序
    ▲从数列中挑出一个元素,称为 “基准”(Pivot),

▲重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

▲递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

d) 希尔排序:也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:
1、插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
2、但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位>

e) 堆排序

f) 归并排序

g) 冒泡排序

2.定义一个二维数组,随机给每一个元素赋值,然后遍历数组,找出最大的值(包含该值所在的行和列)输出。


import java.util.Random;

public class Array {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		 sort1();
//		 sort2(10);
//		 sort4(10);
		 sort3(4,5);
	}
	
/**
 * 	//选择排序
 */
	public static void sort1(){
		int[] base ={9,10,29,29,20,15,35,9,3,30};
		System.out.println("排序前初始数据:");
		for(int i=0;i<base.length;i++){
			System.out.print(base[i]+"\t");
		}
		
		System.out.println();
		System.out.println("排序后数据(小->大):");
		
		for(int i=0;i<base.length;i++){
			
			int lowerIndex = i;
//			找出最小索引
			for(int j=i+1;j<base.length;j++){
				if(base[j]<base[lowerIndex]){
					lowerIndex = j;
				}
			}
//			交换
			int  temp = base[i];
			base[i] = base [lowerIndex];
			base[lowerIndex] = temp;
			System.out.print(base[i]+"\t");
		}
	}
	
/**
 * //插入排序
 */
	public static void sort2(int count){
//		实例化一个数组并赋随机值
		int [] base = new int [count];
		Random ran = new Random();
		
		System.out.println("排序前初始数据:");
		
		for(int i=0;i<base.length;i++){
			int value = ran.nextInt(100);
			base[i] = value;
			
			System.out.print(base[i]+"\t");
		}
		
		System.out.println();
		System.out.println("排序后数据(小->大):");
		
//		排序
		for(int i=1;i<base.length;i++){
			for(int j=i;j>0;j--){
				if(base[j]<base[j-1]){
					int temp = base[j];
					base[j] = base[j-1];
					base[j-1] = temp;
				}
			}
		}
//		输出
		for(int i=0;i<base.length;i++){
			System.out.print(base[i]+"\t");
		}
		
		
	}
	
/**
 * 希尔排序	
 * @param count
 */
	public static void sort4(int count){
//		实例化一个数组并赋随机值
		int [] base = new int [count];
		Random ran = new Random();
		
		System.out.println("排序前初始数据:");
		for(int i=0;i<base.length;i++){
			int value = ran.nextInt(100);
			base[i] = value;
			
			System.out.print(base[i]+"\t");
		}
		
		System.out.println();
		System.out.println("排序后数据(小->大):");
//		分组
		for(int increment = base.length/2;increment>0;increment/=2){
//			每个组类排序
			for(int i =increment;i<base.length;i++){
				int temp = base[i];
				int j=0;
				for( j=i;j>=increment;j-=increment){
					if(temp<base[j-increment]){
						base[j] = base[j-increment];
					}
					else{
						break;
					}
				}//end j
				base[j] = temp;
			}// end i
			
		}//end
		
		for(int i=0;i<base.length;i++){
			System.out.print(base[i]+"\t");
		}
		
	}
	
/**
 * 练习2
 */
	public static void sort3(int hang,int lie){
		int[][] base = new int[hang][lie];
		Random ran = new Random();
//		赋值
		for(int i=0;i<hang;i++){
			for(int j=0;j<lie;j++){
				base[i][j] = ran.nextInt(100);
				System.out.print(base[i][j]+"\t");
			}
				System.out.println();
		}
		
		int  max = 0;
		int x=0;
		int y=0;
		
		for(int i=0;i<hang;i++){
			for(int j=0;j<lie;j++){
				if(base[i][j]>max){
					max = base[i][j] ;
					x = i+1;
					y = j+1;
				}
				
			}
		}
		
		System.out.println("二维数组最大值为:"+max+"\t行:"+x+"\t列:"+y);
		
	}
	
}

分享到:
评论

相关推荐

    指数函数与对数函数[精选].doc

    8. **函数的值域和定义域**:对于y=log (2-log2x),通过解不等式确定函数的值域和定义域,需要理解对数函数的性质。 9. **指数方程的解法**:通过画图或比较指数函数的大小关系来解方程,如2x=的解,需要结合指数...

    多组学数据集成分析.pptx

    - **多组学数据可视化**: 将复杂的多组学数据转化为易于理解和解释的图形、图表和交互式界面,有助于识别模式、趋势和异常值。 - **知识提取**: 通过对多组学数据的深入分析,提取出对疾病诊断、预测和治疗有价值的...

    幼儿园大班数学9的分解与组合教案精选___汇总.docx

    使用扑克牌、数字卡片、筹码等“操作材料”,孩子们可以通过直观的操作,加深对数的分解与组合的理解。 “竞赛元素”的引入是激励孩子积极参与的有效手段。通过设置小组或个人之间的竞赛,可以激发孩子的好胜心,...

    数据结构经典实验算法设计

    这些话题都是数据结构与算法设计的重要组成部分,它们不仅能够帮助我们理解数据结构的基本原理,还能提升解决实际问题的能力。 1. **约瑟夫环问题**:这是一个著名的理论问题,源自古代犹太历史的一个传说。问题...

    2016第七届蓝桥杯CC++-B组题解.docx

    在实现快速排序时,需要正确地选择枢轴元素,然后对数组进行分区,递归地对两个子数组进行快速排序。此题的难点在于对算法原理的深入理解和编程实现的准确性。 综上所述,蓝桥杯CC++-B组的题目涉及了算法、数据结构...

    (完整版)中考数学阅读理解题试题练习题.pdf

    问题中提到从10个人中选取3人参加活动,可以用C(10, 3)来计算不同的选择方法。 5. 求和符号:求和符号Σ用于简化长串数列的加法表达。例如,1到100的连续自然数之和可以用Σ_{n=1}^{100} n表示,而连续偶数的和可以...

    C程序设计上机实验报告10.doc

    3. 操作数组元素:通过指针,我们可以遍历数组,对数组元素进行读取和修改。 4. 数组作为参数:函数可以接受数组作为参数,这在处理大量数据时非常有用。 二、实验环境 实验所需的软件是Visual C++ 6.0或CFree3.5及...

    排列与组合同步练习.docx

    16. 对数的计算与排列组合:在对数式中,底和真数的不同组合可以形成不同的对数值,需要注意底数和真数的取值范围。 17. 比赛与淘汰赛的计数:涉及到单循环赛和淘汰赛的计算,可以将比赛看作是树状结构,通过树的...

    12道不错的数组例题

    通过实践这些例题,你可以加深对数组的理解,提升编程能力。在解决每一道题目时,不仅要关注代码实现,还要思考不同方法的选择和优化,以及如何更好地利用数组特性解决问题。记住,理论知识结合实际编程经验,才是...

    Matlab系列--matlab个人学习笔记.zip

    例如,使用索引和切片技术对数组元素进行访问和修改,字符串的连接、查找和替换等。另外,掌握文件输入输出(I/O)功能,能读取和写入数据文件,这对于数据处理和实验结果保存至关重要。 在数值计算方面,Matlab...

    NOIP2015提高组初赛C++试题.pdf

    ### NOIP2015提高组初赛C++试题知识点解析 ...通过以上解析,我们不仅回顾了NOIP2015提高组初赛C++试题的具体知识点,而且还对这些知识点进行了深入理解。这对于准备参加此类比赛的学生而言是非常有益的复习资料。

    电子政务-变极电机组合调速装置.zip

    变极电机,又称多速电机,是一种通过改变定子绕组连接方式来改变电机极对数,从而调整电机转速的电机。这种电机的优点在于能够灵活地在不同速度下运行,适用于需要调节速度的场合,比如通风、运输、泵送等。组合调速...

    C#窗体个人数字工具开发PPT

    对于数学计算,C#提供了内置的运算符和Math类,支持基本的算术运算以及更复杂的三角函数、对数等。数据存储方面,C#可以使用文件系统、数据库(如SQLite、SQL Server)或者XML文件来保存和读取数据。 接下来,我们...

    Josephus 约瑟夫问题(POJ)

    而位运算则可以将问题转化为对数组的位操作,降低空间复杂度。 总结来说,约瑟夫问题是一个典型的理论与实践结合的算法问题,它锻炼了程序员的逻辑思维能力和问题抽象能力。通过分析和解决这些POJ题目,我们可以...

    五年级数的整除奥数.pdf

    这类问题考察学生对数论概念的理解和应用能力。 15. 连续自然数问题:文件中出现了连续自然数问题,如三个连续自然数在 100~200 之间,其中最小的有约数 3,中间的有约数 5,最大有约数 7 等。这类问题考察学生对...

    C Primer Plus (中文版)第8章编程练习 参考答案(仅供参考~)

    以下是部分编程练习的参考答案及其解析,这些内容仅供参考,学习过程中应结合个人理解和实践进行调整。 一、数组操作 数组是C语言中存储固定大小数据集合的基本结构。在第8章中,可能会有创建、初始化、遍历数组...

    山东省聊城市2020-2021学年高二下学期期末考试 数学 .doc

    8. **高斯函数与对数函数**:第九题涉及到了高斯函数和对数函数,函数y={x}-1+log_a x有3个不同的零点,这需要我们理解高斯函数的性质以及对数函数的单调性。 9. **复数、指数函数与对数**:这部分是复数的性质、...

    C++程序设计实践上机指导书第八次.pdf

    通过友元函数或单独的类process对数组进行排序。 四、思考题 1. 构造函数声明顺序:探讨类中构造函数的声明规则及其对程序的影响。 2. 友元关系的传递性:分析友元关系是否可以传递,讨论过度使用友元关系可能带来...

    集体备课活动系列报道.doc

    【集体备课活动系列报道】是明水县第一中学高一数学组进行的一次重要的教学研讨活动,旨在提升教学质量,促进教师间的合作与知识共享。集体备课是教学准备的关键环节,它对于确保课堂教学效果和提升学生的学习成效...

    【高考调研】2015高中数学 课时作业3 新人教A版选修2-3

    例如,第14题中的三角形阵列问题,实际上与将6个人站成一排的排列问题等价,这要求学生能够识别问题本质,选择合适的排列组合方法进行求解。 在数学解题过程中,排列组合的应用不仅限于课内知识,它还是解决现实...

Global site tag (gtag.js) - Google Analytics