二、声明、创建数组
1.数组的声明 A.告诉系统数据类型是什么 B.语法: 数据类型[] 数组名;2.数组的创建 A.为数组分配内存空间 a.new操作符的使用3.声明并创建数组 数据类型[] 数组名 = new 数据类型[大小]; 列:int[] arry = new int[3];4.数组的特点 A.数组有一个字段length,表示此数组对象可以存储多个元素即数组长度;length不是实际保存的元素个数 B.“[]”语法是访问数组对象成员的唯一方式 C.对象数组保存的是引用,基本类型数组直接保存基本类型的值 D.新生成的数组对象,其中所有的引用自动化初始化为null;基本类型数组成员有各自默认值(数值型自动初始化为 0,字符型为(char)0,布尔型为false,float/double型为0.0)
三、初始化数组
1.数组的初始化 A.为数组中的成员一一赋值2.数组赋值的两种方式 A.边声明边赋值(静态初始化) int[] score = {66,77,88}; int[] score = new int[]{66,77,88}; B.动态地获取(从键盘录入)信息并赋值 int[] score = new int[3]; Scanner input = new Scanner(System.in); for(int i=0 ;i<3;i++){ score[i] = input.nextInt(); } 四、常用数组排序算法1.冒泡排序法
工作原理:比较相邻的元素。如果第一个比第二个大,就交换它们两个。对每一对响铃元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数。针对除了最后一个元素以外所有的原色重发以上的步骤。直到没有任何一对数字需要比较。总结:N个数,比较N-1轮,每轮比较N-1-i次。
代码示例:
1 package com.sanlianxueuan; 2 3 public class Demo7 { 4 5 /** 6 * 冒泡排序 7 */ 8 public static void main(String[] args) { 9 int [] array = {1,5,3,2,6,7,9,13,54,20};10 //N个数比较的论数N-1;11 for (int i=0;iarray[j+1]){16 //两个数做交换,通过设置临时变量17 int temp = array[j];18 array[j] = array[j+1];19 array[j+1] =temp;20 }21 }22 }23 //把排好序的数组输出24 for(int i=0;i
2.选择排序法:
工作原理:首先在为排序序列中找到最小元素,存放到排序序列的其实位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素觉排序完毕。代码示例:
1 package com.sanlianxueuan; 2 3 public class Demo8 { 4 5 /** 6 * 选择排序 7 */ 8 public static void main(String[] args) { 9 int [] array = {1,5,3,2,6,7,9,15,54,82};10 int min = 0; //保存最小元素值的下标11 //N个数进行N-1轮的比较12 for(int i=0;iarray[j]){17 min = j;18 }19 }20 //如果第i个最小的数位置不在i上,则进行交换21 if(i != min){22 int temp = array[i];23 array[i] = array[min];24 array[min] = temp;25 } 26 }27 for(int i=0;i
总结:N个数,比较N-1轮
3.插入排序法:
工作原理:它是通过构建有序序列,对于未排序数据,在已排序列中从后向前扫描,找到相应位置并插入。从后向前扫描过程中,需要反复吧已排序元素逐步向后挪位,为最新元素提供插入空间。代码示例:
1 package com.sanlianxueuan; 2 3 public class Demo9 { 4 5 /** 6 * 插入排序 7 */ 8 public static void main(String[] args) { 9 int [] array = {20,25,15,42,36,16,12};10 for(int i=1;i0&&temp
五、常用数组查找算法
1.线性查找法: 工作原理:它又称之为顺序查找。在一列给定的值中进行搜索,从一端开始注意查询每个元素,知道返回所需元素的过程。 例:A.查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1; B.求数组中的最大值,最小值代码示例:
1 package com.sanlianxueuan; 2 3 import java.util.Scanner; 4 5 public class Demo4 { 6 7 /** 8 * 查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1; 9 */10 public static void main(String[] args) {11 int[] array = {10,20,80,60,50,90,70,30};12 Scanner input = new Scanner(System.in);13 System.out.println("请输入一个数:");14 int number = input.nextInt();15 int index =-1; //保存找到的数所在数组中的下标,找不到等于-1;16 for(int i=0;i
2.二分法查找:-----针对的是有序的数据
工作原理:它又称之为折半查找法。讲数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置将数组分成前、后两个子数组,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子数组,否则进一步查找后一子数组。重复以上过程知道找到或者找不到为止。代码示例:
1 package com.sanlianxueuan; 2 3 import java.util.Scanner; 4 5 public class Demo6 { 6 7 /** 8 * 二分法查找 9 */10 public static void main(String[] args) {11 int [] array ={1,2,3,4,5,6,7,8,9,18,49,87,90};12 System.out.println("请输入要查找的数:");13 Scanner input = new Scanner(System.in);14 int number = input.nextInt();15 int index = -1; //保存找到数所在数组中的下标,找不到等于-116 int start = 0; //起始下标17 int end = array.length-1; //终止下标18 int middle;19 while(startarray[middle]){29 start = middle+1;30 31 }32 //保留左边的数,去掉右边的数33 if(number < array[middle]){34 end = middle - 1;35 36 }37 }38 if(index != -1){39 System.out.println("要找的数在"+index+"位");40 }41 42 if(index == -1){43 System.out.println("not find");44 }45 46 }47 48 }
六、Arrays类使用
java的jdk中提供了一个Arrays工具类,此类专门为程序员操作数组提供了很多专有的方法,通过方法的调用可以对数组进行复制、排序、比较、查找元素等功能。代码示例:
1 package com.sanlianxueuan; 2 3 import java.util.Arrays; 4 5 public class Demo10 { 6 7 /** 8 * Array类的引用 9 */10 public static void main(String[] args) {11 int [] arraySrc1 = {1,3,4,5,6,2};12 //拷贝数组13 //参数说明:第一个是要拷贝的数组名,第二个是数组的长度14 int [] arrayDes1 = Arrays.copyOf(arraySrc1, 10);15 for(int i=0; i