三十九、排序与查找
作者:互联网
1、冒泡排序
1.1 概述
冒泡排序:将一组数据按照升序规则进行排列
冒泡排序原理:相邻的数据两两比较,小的放前面,大的放后面
注意:
- 如果有n个数据进行排序,总共需要比较n-1次
- 每一次比较完成,下一次的比较就会少一个数据参与
1.2 冒泡排序图解
1.3 代码实现
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {7, 6, 5, 4, 3};
System.out.println("排序前:" + Arrays.toString(arr));
// 这里减1,是控制每轮比较的次数
for (int x = 0; x < arr.length - 1; x++) {
// -1是为了避免索引越界,-x是为了调高比较效率
for (int i = 0; i < arr.length - 1 - x; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
}
}
2、选择排序
2.1 概述
- 每趟选出数组 中的最小值,把值放在前面,直至所有数据按照要求完成排序
- 如果有n个数据进行排序,总共需要比较n-1次
- 每一次比较完毕,下一次的比较就会少一个数据参与
2.2 选择排序图解
2.3 代码实现
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {7, 6, 5, 4, 3};
System.out.println("排序前:" + Arrays.toString(arr));
// 这里减1,是控制比较的轮数
for (int x = 0; x < arr.length - 1; x++) {
// 从x+1开始,直到最后一个元素
for (int i = x+1; i < arr.length; i++) {
if (arr[x] > arr[i]) {
int temp = arr[x];
arr[x] = arr[i];
arr[i] = temp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
}
}
3、二分查找
3.1 数组的二分查找步骤
- 定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引
- 循环查找,但是min <= max
- 计算出mid的值
- 判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
- 如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找
- 如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找
- 当 min >= max 时,表示要查找的元素在数组中不存在,返回-1.
3.2 二分查找图解
假设有一个给定有序数组(10,14,21,38,45,47,53,81,87,99),要查找50出现的索引
则查询过程如下图所示:
3.3 二分查找代码实现
public static void main(String[] args) {
int[] arr = {10, 14, 21, 38, 45, 47, 53, 81, 87, 99};
int index = binarySerach(arr, 38);
System.out.println(index);
}
/**
* 二分查找方法
* @param arr 查找的目标数组
* @param number 查找的目标值
* @return 找到的索引,如果没有找到返回-1
*/
public static int binarySerach(int[] arr, int number) {
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int mid = (start + end) / 2;
if (number == arr[mid]) {
return mid ;
} else if (number < arr[mid]) {
end = mid - 1;
} else if (number > arr[mid]) {
start = mid + 1;
}
}
return -1; //如果数组中有这个元素,则返回
}
标签:arr,int,mid,三十九,查找,排序,public 来源: https://www.cnblogs.com/6ovo6/p/14951608.html