- 数组的进一步探究 ——Java
- 深度拷贝 ,浅拷贝
- 深度拷贝
- 浅拷贝
- 数组的二分查找
- 图示解释:
- 代码:
- 数组的经典冒泡排序
- 代码:
- 偶数在前,奇数在后
- 代码:
- 最后:
- 每博一文案
深度拷贝 ,浅拷贝
- 这里简单介绍一下深度拷贝,浅拷贝
- 简单的说就是拷贝后的结果的改变,不会影响原先拷贝对象的值
浅拷贝
- 同样简单说就是与深拷贝相反的:
- 就是通过拷贝的后的结果自身的改变,结果会影响原先拷贝的对象,一般为引用类型
数组的二分查找
- 数组中常见的一些查找方式
- 二分查找又称“折半查找”
- 二分查找有一个大前提就是:
- 该数组必须要为一个有序的数组,才能使用二分查找
代码:
public class Study06 {
public static int binarySearch (final int[] arr, final int key) {
int left = 0; // 数组的起始位置
int right = arr.length-1; // 数组有效数值的最后位置
while(left <= right ) {
int mid = (left + right) >>> 1;
if(arr[mid] > key ) {
right = mid - 1;
} else if(arr[mid] < key ) {
left = mid + 1;
} else {
return mid;
}
}
return -1; // 数组没有下标为 -1 的位置,所以代表没有找到
}
public static void main (String[] args) {
Study06 binarySearch = new Study06();
int[] arr = new int[]{1,2,5,6,9,12,19,20};
int ret = Study06.binarySearch(arr,9);
System.out.println("下标:"+ret);
}
}
数组的经典冒泡排序
- 冒泡的排序的就是每次排序把最大值,或者是最小值放把最后面
- 优化一下
- 当所给的数组本身就是有序的,我们就不要再进行不必要的排序了,
- 或者当我们排序了前几次就已经实现了,有序了,同样我们后面也不要进行不必要的排序了
- 我们可以定义一个Boolean 类型,通过它记录是否已经有序了,有序了,我们就不用再排序了
代码:
public class Study06 {
public static void bubbleSort(int[] arr ) {
for (int i = 0; i < arr.length - 1; i++) {
boolean flg = false;
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j] > arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
flg = true;
}
}
if(flg == false) {
break;
}
}
}
public static void main (String[] args) {
Study06 bubbleSort = new Study06();
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
System.out.println("排序之前:"+Arrays.toString(arr));
Study06.bubbleSort(arr);
System.out.println("排序之后:"+Arrays.toString(arr));
}
}
偶数在前,奇数在后
- 实现一个偶数在前,奇数在后面
- 方案;
- 定义两个指针
- 一个在最开头,遇到奇数就停止,另一个在最后面,遇到偶数停止,
- 最后通过它们停止的后交换数值
代码:
public class Study06 {
// 一个数组的偶数放到最前面,奇数放到后面
public static void swap (int[] arr) {
int left = 0;
int right = arr.length-1;
while(left < right) {
while(left < right && arr[left] % 2 == 0) {
left++;
} // left 为奇数时跳出,停止
while(left < right && arr[right] % 2 !=0) {
right--;
} // right 为偶数时,跳出,停止
if(left < right) { // 奇数,偶数交换位置
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
}
public static void main (String[] args) {
Study06 swap = new Study06();
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
System.out.println("变换之前:"+Arrays.toString(arr));
Study06.swap(arr);
System.out.println("变换之后:"+Arrays.toString(arr));
}
}
最后: 每博一文案
人与人之间为什么会疏远,大概是因为在环境的影响下,渐渐的三观已经不同,你们倾吐着各自的烦恼和生活。
而对方却再也无法感同身受,这并非你们任何一方的过错,只是时光不宽容,你们都来自于山川,湖海,却有各自的旅途,真诚要走,不必失落,也不必难过。
只要曾经拥有过美好,我们就依旧还是朋友。
—————— 一禅心灵庙语
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家!后会有期,江湖再见!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)