Java中有对于排序封装的方法,Arrays.sort()大家肯定不陌生。但对于算法的原理可能有人不知道。

下面我们讲解一下选择排序与冒泡排序实现原理:

选择排序

选择排序图解
选择排序图解

如图,选择排序的原理就是数组中的一个元素分别和其他所有元素两两比较,把最大值或者最小值赋给这个元素,从而实现排序。

相关代码如下

1
2
3
4
5
6
7
8
9
10
//升序排序(选择排序法)
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}

冒泡排序

这种排序方法经常会被问道,也算是明星排序算法了,其原理就是,循环比较相邻元素的值,然后把较大值或者较小值放到最右边,实现排序。

冒泡排序图解
冒泡排序图解

代码如下

1
2
3
4
5
6
7
8
9
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}

本文彩蛋

二分查找法
二分法查找
二分法查找

二分查找法要求数组或集合是有序的。通过不断查找中间值,来与要查找的值比较,从而确定该值的位置。

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//key为需要查找的值
private static int binarySearch(int[] arr,int key) {
int min = 0;
int max = arr.length - 1;
while (min<=max) {
int mid = (min + max) >> 1;
if (arr[mid] == key) {
// 说明key找到
return mid;
}
if (arr[mid] > key) {
max = mid - 1;
}
if (arr[mid] < key) {
max = mid + 1;
}
}
return -1;
}

以上就是相关的查找方法

欢迎关注我的博客:Lvshen’s Blog