2022-07-1 第二小组 宋雨 学习笔记
Java 回顾第三天(threeDay)
小插曲:数据结构
- 数组: 最基本的数据结构,线性表(数据元素是一对一的关系,除了第一个和最后一个之外,其余的元素都是首位连接的){有序的}
- 链表:
- 树:
- 图:
二分查找(有序数组中)(用递归实现)
思想:中间切一半,如果中间值大于你要的值,说明他在切割完后的左边,反之在右边。然后再次进行切割,直到找到你要的数字。
public int findNumber(int[] nums,int left,int right,int number){
int mid = left + ((right - left) / 2);
int minVal = nums[mid];
if (minVal > number ){
return findNumber(nums,left,mid,number);
}else if (minVal < number){
return findNumber(nums,mid+1,right,number);
}else if (minVal == number){
return mid;
}
return 0;
}
冒泡排序
思想:遍历时,第一个和第二个比,第二个和第三个比依稀类推。前一个和后一个进行比较,如果前一个的数大于后一个的树就进行交换,这样的话我们在第一轮的时候就能够将最大的数交换到数组的最后一位(下一次的比较就不需要刚刚的最大值进行参与了)。以此类推就可以将数组变得有序(从小到大)。
public void mapPao(int[] nums){
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j+1]) {
int temp = nums[j + 1];
nums[j+1] = nums[j];
nums[j] = temp;
}
}
}
}
选择排序
思想:第一次循环找到第一小的数,然后第二次找到第二小的以此类推。这一次我不一前一后进行比较,我直接找到最小树的小标然后再进行交换,所以我第一次会将最小的值交换到数组的第一位,以此类推这样的话,数组就会变得有序
public void xuanZe(int[] nums){
for (int i = 0; i < nums.length; i++) {
int minIndex = i;
for (int j = i; j < nums.length - 1; j++) {
if (nums[j] < nums[minIndex]){
minIndex = j;
}
}
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
}
插入排序
思想:我先记录当下的下标,和当前下标的后一个值。然后我进行比较(前提是我当前的数要大于后一个值,并且我的下标是大于等于 0 的),然后我将较大值赋值给较小的值【现在前后俩个值都是较大的值了】,但是现在我们需要将我们的内层循环退出,所以我们要将记录的下标进行自减[循环退出的条件之一,交换的条件还有前面的数大于后面的数],然后再将最小值放入到数组的最前面
public void insertSort(int[] nums){
for (int i = 0; i < nums.length-1; i++) {
int index = i;
int num = nums[i+1];
while (index >=0 && nums[index] > num){
nums[index+1] = nums[index];
index--;
}
nums[index+1] = num;
}
}