java自学记录-8
记录时间:2019-7-29
记录内容摘要:
1、二维数组
2、快速排序
3、数组查找、删除、插入
1、二维数组
二维数组的定义方式主要有两种
1、单独定义不初始化;采用new类来定义
double[][] name = new double[row][col];
2、直接初始化
int[][] arr = {{2,5},{1},{3,2,4},{1,7,5,9}};
二维数组可以理解为一维数组的嵌套,即arr[0]、arr[1]分别是一个一维数组,在调用具体元素时需要具体行和列;
遍历二维数组时需要双重循环
for(int i = 0; i < arr.length; i ++)
{
for(int j = 0; j < arr[i].length; j++)
System.out.print(arr[i][j]);
System.out.println();
}
i控制行,j控制列
arr.length为有几行
arr[i].length为第i行的一维数组长度;
不同行的长度可以不同;(可以通过输出arr[i].length来验证)
2、快速排序
java中快速排序有直接的算法
Arrays.sort(num);可以直接对num数组进行排序;
快速排序是采用递归思想;对某一数字将小的放到左边,大的放到右边,然后再对左右两边进行相同操作,直到完成;
快速排序默认升序,若需要降序可是数组首尾倒置
3、数组查找、删除、插入
1、数组查找
数组查找中我所知道的有两种
一、遍历查找
即一个一个将数组中的元素与所查找元素做对比,直到找到或者找完整个数组为止;
二、二分查找
前提:数组为有序数组,升序降序都行
二分查找是进行范围性确定,通过比较大小来逐步确定所查找元素的范围来最终确定元素位置
代码如下:
public class QuickSort {
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
quickSort(arr, low, j-1);
//递归调用右半数组
quickSort(arr, j+1, high);
}
public static void main(String[] args){
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr, 0, arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
2、数组删除
数组的删除并未真正删除数组元素个数,只是更改数组的内容以及访问的长度;因为数组的大小在定义时已经确定并且不可更改
数组的删除较为麻烦,因为在删除某一元素后需要将该元素后的元素全部向前移一位,在c中学到的链表更便于删除和插入;
3、数组插入
数组的插入首先要求数组的长度要足够,因为数组插入和删除一样,在插入操作后都需要将后面的元素移动。所以在删除和插入方面,数组并不够灵活;
额外收获
1、今天第一次看到了自己想想中的那种弹窗式对话,而不是 老旧的控制台文本交流;明天就开始学习一下弹窗式交流(自己取的名字。。)
可以采用cal系列来获得日期,在月份的时候因为时从0月开始算,所以需要+1