选择排序:
选择排序的思想:每轮选择当前位置,开始找出后面的较小值与该位置交换。
选择排序的关键:
- 确定总共需要选择几轮:数组的长度-1。
- 控制每轮从以前位置为基准,与后面元素选择几次。
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] arry = {23, 43, 12, 33}; for (int i = 0; i < arry.length - 1; i++) { for (int j = i+1; j < arry.length; j++) { if(arry[i]>arry[j]){ int temp = arry[i]; arry[i] = arry[j]; arry[j] = temp; } } } System.out.println(Arrays.toString(arry)); } }
输出结果:[12, 23, 33, 43]
二分查找:
- 二分查询性能好,二分查找的前提是必须是排好序的数据。
- 在数据量特别大的时候,基本查找从前往后寻找的性能是很差的!
- 步骤:
-
- 定义变量记录左边和右边位置。
- 使用while循环控制查询(条件是左边位置<=右边位置)
-
- 循环内部获取中间元素索引
- 判断当前要找的元素如果大于中间元素,左边位置=中间索引+1
-
- 判断当前要找的元素如果小于中间元素,右边位置=中间索引-1
- 判断当前要找的元素如果等于中间元素,返回当前中间元素索引。
public class Main { public static void main(String[] args) { int[] arr = {1, 12, 22, 23, 34, 45, 67, 88}; System.out.println(binarySearch(arr,22)); } /** * * @param arr 排序的数组 * @param data 要查找的数 * @return 索引,如果元素不存在直接返回-1 */ public static int binarySearch(int[] arr, int data){ int left = 0; int right = arr.length-1; while (left<=right){ int middleIndex = (left + right) / 2; if(data>arr[middleIndex]){ left = middleIndex+1; }else if(data<arr[middleIndex]){ right = middleIndex-1; }else{ return middleIndex; } } return -1; } }
输出结果:2