一.数组的定义
一组具有相同数据类型数据的数据结构
二.数组的声明
int [] a
int a[]
注意:在声明数组时,不能指定数组的大小
比如:int a[5],非法
三.数组的初始化
1.静态初始化:
int[] a={1,2,3};//默认定义数组大小为3
int[] a=new int[]{1,2,3};
int[] a=new int[5];//指定a数组的大小
2.动态初始化:
①依次给数据元素赋值
a[0]=0;
a[1]=1;
②使用for循环赋值
for(int i=0;i<10;i++){
a[i]=i;
}
四.数组的类型定义
1.简单数据类型数组
①栈:数组名内存
②堆内存:数组元素值
2.引用数据类型数组
①栈内存:数组名
②堆内存:a.数组元素的地址
b.数组元素值(String类型值位于常量池)
五.数组元素的默认初始化
1.简单数据类型
数据类型的默认值,比如int,默认值是0;
2.引用数据类型
数据类型的默认值为null,而非地址,比如Stringnull
六.数组下标
1.数组下标默认是从0开始
2.数组元素表示:a[0],a[i],a[6*i]
3.数组取值范围:如果数组长度为n,0~n-1;
超过此范围会出现数组越界异常
4.数组长度的属性length
七.总结数组特点
1.数组中既可以放简单数据类型,也可以放引用数据类型
2.数组变量是引用数据类型,不是简单数据类型
3.数组的大小在创建时指定,之后不可以修改;而数组中的元素值可以修改
八.for-each增强for循环
写法:for(数据类型 变量 :数组名或集合名){
语句体...
}
作用:遍历数组和集合中的数据元素
九.可变参数
写法:方法名(类型名... 变量名){语句体...}
作用:接收不确定的参数个数,使用较灵活
一.冒泡排序
1.特点:给定一个数组,它是进行两两比较,将较大数放到最后,直至数组元素有序
2.代码:public static void bubbleSort(int[] a) {
int n = a.length;
//总共进行n-1轮的比较
for (int i = 1; i < n; i++) {
for (int j = 1; j < n ; j++) {
if (a[j-1] > a[j]) {
//交换
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;}
}
}
}
二.选择排序:
1.特点:给定一个数组,先遍历出该数组的最小值,将其放到特定位置,然后再次遍历最小值,知道数组元素有序
2.代码:public static void selectionSort(int[] a) {
for(int i = 0; i < a.length -1; i++) {// 做第i趟排序
int k = i;
for(int j = k + 1; j < a.length; j++){// 选最小的记录
if(a[j] < a[k]){
k = j; //记下目前找到的最小值所在的位置
}
}
if(i != k){ //交换a[i]和a[k]
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
三.插入排序
1.特点:给定一个数组,先取出数组中两个值进行比较,然后按升序(或降序)排列,再从数组中取出第三个元素,跟原数列进行比较,生成一个升序(或降序)数列,直至数据元素全部取出,最终生成一个有序数列
2.代码:
public static void insertSort(int[] a) {
for (inti= 1; i< a.length; i++) {
for (int j = i; j > 0; j--) {
if (a[j] < a[j -1]) {
int temp = a[j];
a[j] = a[j -1];
a[j -1] = temp;}
else {break;}
}
}
}
一.顺序查找
1.特点:给定一个数组和需要查找的数字,在数组中依次对各个数据元素进行比较,直至找到需要查找的数字
2.代码:public static int search(int[] a,int num) {
for(int i = 0; i < a.length; i++) {
if(a[i] == num){return i;}
}
return-1;
}
二.二分查找
1.特点:给定一个有序的数组和需要查找的数字,先根据首尾索引的一半,找到一个数字进行比较,如果需要查找的数字大于该数字,则在该数字的右半部分在进行二分查找;反之则在该数字的左半部分进行二分查找,直至找到该数字
2.代码:
public static intbinarySearch(int[] a, intnum) {
intlow = 0; // 起点
intupper = a.length-1;// 终点
while (low <= upper) {
intmid = (low + upper) / 2; // 中间点
if (a[mid] < num) { // 中间点的值小于要查找的值
low = mid + 1; // 更改查找的起点为中间点位置后一位
} else if (a[mid] > num) { // 中间点的值大于要查找的值
upper = mid -1; // 更改查找的终点为中间点位置前一位
} else { // 中间点的值等于要查找的值
return mid; // 返回该位置
}
}
return -1;
}
注意:-1表示该数组中没有此数字
共同学习,写下你的评论
评论加载中...
作者其他优质文章