赞
踩
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (key < array[mid]) {
high = mid - 1;
} else if (key > array[mid]) {
low = mid + 1;
} else {
return mid;
}
}
return -1;
}
2.选择排序
选择排序是一种简单直观的排序算法。每一次从待排序的序列中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
例如一个无序数列:8,6,19,10,15我们想要给它按从小到大排序。
第一次我们从头往后遍历选择最小的6,放在序列的第一个位置。
然后我们从剩余8,19,10,15中选择最小的8放在第二个位置,以此类推。
直到排序完成。
选择排序的Java实现:
public void selectSort(int[] array) {
int N = array.length;
for (int i = 0; i < N; i++) {
//最小元素的索引
int min = i;
for (int j = i + 1; j < N; j++) {
if (array[j] < array[min]) {
min = j;
}
}
if (min != i) {
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
3.插入排序
假设有一组无序数列 8,6,4,10,3 。我们从左往右看先看第一个数8,当只有1个8时,它就是一个有序数列,下面我们在拿第二个数,拿它和8比较,发现它比8小,我们就把他放在8的前面这样我们就得出一个有序的6,8。然后我们在拿4从后往前一次与有序数列的值作比较,直到找到比他小的数(找不到就把它作为最小的数放在有序数列的第一位)。以此类推,每经过一轮的比较插入,有序数列的值就多一位,无序数列的值就少一位。
下面我们来看看插入排序的Java实现:
public void insertSort(int[] array) {
//数组的大小
int N = array.length;
//从1开始,因为数组的第一个数,肯定是有序的。
for (int i = 1; i < N; i++) {
int temp = array[i];
int leftIndex = i - 1;
//从右往左依次比较直到找到比他小的数
while (leftIndex >= 0 && array[leftIndex] > temp) {
array[leftIndex + 1] = array[leftIndex];
leftIndex–;
}
array[leftIndex + 1] = temp;
}
}
4.冒泡排序
假设一组无序数列 8,6,19,10,15。我们从头开始依次比较相邻的两个数,发现8比6大我们交换两个数的位置。数列变成6,8,19,10,15。我们在比较8和19,19比8大位置不动,我们在拿10根19比较,10比19小,交换位置,序列变成8,6,10,19,15,我们在拿15和19比较,15小于19,交换位置。第一轮排序结束,序列中最大的数19被排在了数列的最后。每轮排序结束剔除最后的数,重复上面的步骤,每结束一轮排序,都会在现有数列中找出最大的放在最后。直到没有任何一对数需要比较,排序完成。
Java中冒泡排序的实现:
//冒泡排序
public void bubbleSort(int[] array) {
int N = array.length;
for (int k = N - 1; k >= 0; k–) {
for (int i = 0; i < k; i++) {
if (array[i] > array[i + 1]) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。
很多人担心学了容易忘,这里教你一个方法,那就是重复学习。
打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。
从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。
人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
wMJb-1713664569009)]
人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。