黑马程序员 Java基础_3 数组,数组排序和应用
来源:互联网 发布:中国校花大赛数据库 编辑:程序博客网 时间:2024/05/18 01:22
一、什么是数组
1、数组是有序的元素集合。而元素可以是基本类型,也可以是对象的引用或者其他数组的引用。数组本身就是一个继承Object的对象,所以在分配空间是要用new来建立。
2、数组的建立。
一般有两种方法:
第一种:数据类型 数组名 [ ] 例如 int arrayName [ ]=new int[ 长度],长度是根据需求个数添加进去。
第二种:数据类型[ ] 数组名 例如 int[ ] arrayName=new int [长度 ]
3、数组在内存的表示
当一个数组建立是,系统会在栈内存分配一个arrayName的空间,里面装的是数组在堆内存的引用,所以arrayName里面不是数组,只是数组的引用。
4、如何获得数组元素的值
数组元素的值可以通过arrayName[ index]的方式来访问,例如int[ ] a=new int[3],int b=a[2];像int[ ]数组元素的默认值都是0,也就是说b等于0,还有对数组的访问要注意角标,数组的角标是从0开始的,所以数组最后一个元素为[length-1],如果index大于length-1,就会报异常。
二、多维数组
多维数组可以看作是数组的数组。就是数组元素是数组。
例如 int[ ][ ] a=new int[ 2][3 ],数组a是一个二维数组,如果要访问里面的元素就要提供两个角标,例如a[1][1],他就是访问a里面第二个数组的的第二个元素。
三、数组的排序
1、冒泡排序
冒泡排序就是通过从角标小到大每次对比相邻的两个值,值大的换到后面,每一轮都会把最大的值换到后面,所以第一次只要比较元素个数减1,以后每一轮比较次数都减一次。
for (int j=0;j<arr.length;j++) { for (int i=1;i<arr.length-j;i++) { if (arr[i+1]>arr[i])//若改成<是从大到小排序 { int temp = 0; temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } }
2、选择排序
选择排序就是从第一个位置开始,通过第一个位置的元素与后面的元素进行比较,然后,把最小的换到第一位,然后从第二个位置开始重复操作。
for (int j=0;j<arry.length;j++) { //i=j,每比较一轮就减少一个数,比较后,再用第二个数获得后面的最小值 for (int i=j+1;i<arry.length;i++) { //换值 if (arry[j]>arry[i]) { int temp = 0; temp = arry[j]; arry[j] = arry[i]; arry[i] = temp; } } }
最后是毕老师的一个对数组应用的练习题,代码如下。
步骤 1创建类FindArry 2用for遍历数组,如果查找到相同内容,记录脚标并返回 3如果未找到,就返回-1 如果要在一个有序数组中插入一个数,之后仍有序 就是先查找数组,用折中法:如果查找到有此数,则返回的中间值就是插入的地方,否则将返回的-1改成返回min,即为插入的地方 如:{1, 2, 3, 5, 6, 8, 11, 13}插入8,返回mid = 5;插入后为{1, 2, 3, 5, 6, 8, 8, 11, 13} 插入10,返回min = 6,插入后为{1, 2, 3, 5, 6, 8, 10, 11, 13} */ import java.util.*; class FindArry { //方法一:遍历每一个元素查找 public static int findarr(int[] arr,int key) { for(int i=0;i<arr.length;i++) { if(arr[i] == key) { return i; } } return -1; } //方法二:折半,前提是数组是按大小顺序排列好的, //用查找的值和中间值比较,大则和下一半中间值比依次,小则和上一半中间值比,找到则返回。 // 小值的编号在左移或大值的编号在右移。要判断是否大小值的编号相遇,仍若未找到,则不再循环,返回-1 public static int FindArry1(int[] arr,int key) { int min,max,mid; min = 0; max = arr.length-1; mid = (min + max)/2; //循环,查找中间值与要查找的值比较 while(key != arr[mid]) { if (key > arr[mid]) min = mid +1; else max = mid - 1; if (min > max) return -1; mid = (min + max)/2; } return mid; } //方法三:折半第二种 //while的条件改变 public static int FindArry2(int[] arr,int key) { int min,max,mid; min = 0; max = arr.length-1; //循环,查找中间值与要查找的值比较 while(min <= max) { mid = (min + max)>>1; if (key > arr[mid]) min = mid +1; else if(key<arr[mid]) max = mid - 1; else return mid; } return -1; } public static void main(String [] args) { int[] arr = {1,6,11,2,8,5,3,13}; int m = findarr(arr,3); System.out.println("m=" + m); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); int x = FindArry1(arr,13); int y = FindArry2(arr,25); System.out.println("查找13的结果x=" + x + "\n查找25的结果y=" + y); } }</span>
- 黑马程序员 Java基础_3 数组,数组排序和应用
- 《黑马程序员》Java数组和排序
- 黑马程序员_3 JAVA基础
- 黑马程序员-java基础 循环和数组
- 黑马程序员--java基础--函数和数组
- 黑马程序员--------Java基础-----数组和类
- 黑马程序员---Java基础---函数和数组
- 黑马程序员-JAVA数组应用
- 黑马程序员-->Java基础-->数组
- 黑马程序员---java基础----数组
- 黑马程序员-Java基础-数组
- 黑马程序员-----Java基础-----数组!
- 黑马程序员---java基础--数组
- 黑马程序员---Java基础---数组
- 黑马程序员 java基础 函数 数组 查找与排序总结
- 黑马程序员 Java基础<一> 数组及排序
- 黑马程序员:Java基础总结----数组排序问题
- 黑马程序员-----JAVA基础--数组排序的两种算法
- 高性能 Socket 组件 HP-Socket v3.2.1 正式发布
- Java 如何证明加载类的动作仅发生一次。证明该类的第一个实体的创建或者对static成员的访问都有可能引起加载
- webshell变形
- 根据先序遍历和中序遍历求后续遍历
- linux SHELL 编程基础知识(随笔记)
- 黑马程序员 Java基础_3 数组,数组排序和应用
- 基于GTK+的单词数值计算器-实验报告
- 闲来无事总结的各种[XXX]的用法……高手勿入……内部低能……
- 浙大PAT考试1001~1004
- 生成模型与判别模型
- 手把手教你如何用读写plist文件
- 我的第1篇博客
- 高性能 Socket 组件 HP-Socket v3.2.1 正式发布
- [Java 11] System 类 与 Runtime 类