Java中常见的算法 - 冒泡排序 - 选择排序 - 二分查找

忘是亡心i 2023-09-26 11:38 110阅读 0赞

文章目录

    • 常见算法
      • 选择排序
      • 冒泡排序
      • 二分查找

常见算法

选择排序

选择排序的思想:

每轮选择当前位置,开始找出后面的较小值与该位置交换

在这里插入图片描述

最终结果: 1 2 3 5

选择排序的关键:

确定总共需要选择几轮:

在上面例子中, 我们发现四个数字需要比较三轮;

  • 第一轮: i = 0
  • 第二轮: i = 1
  • 第三轮: i = 2

可以得到确定轮数是: i < 数组的长度 - 1

控制每轮交换的次数: 控制每轮从以前位置为基准,与后面元素选择几次。

  • 控制每轮次数我们可以用另一个变量 j 控制; 当 i = 0时, 表示进行第一轮比较, j 的值设置为 i + 1, 那么可以得到交换次数是: j < 数组的长度
  • 当i = 0时表示第一轮, j = 1, j < 4(数组的长度)
  • 第一轮第一次比较: j = 1
  • 第一轮第二次比较: j = 2
  • 第一轮第三次比较: j = 3

示例代码:

  1. public static void main(String[] args) {
  2. // 定义数组
  3. int[] arr = {
  4. 10, 20, 0, 25, 90, 55, 30};
  5. // 选择排序
  6. int num = 0;
  7. for (int i = 0; i < arr.length - 1; i++) {
  8. // 表示循环进行多少轮
  9. for (int j = i + 1; j < arr.length; j++) {
  10. // 表示每轮比较多少次
  11. if (arr[i] > arr[j]) {
  12. // 用i确定要比较的数组元素, j确定被比较的数组元素
  13. num = arr[i];
  14. arr[i] = arr[j];
  15. arr[j] = num;
  16. }
  17. }
  18. }
  19. // 输出数组内容
  20. System.out.println(Arrays.toString(arr));
  21. }

冒泡排序

冒泡排序思想:

每次从数组中找出最大值放在数组的后面去。

在这里插入图片描述

实现冒泡排序的关键步骤分析:

和选择排序一样 :

确定共需要几轮: 数组长度 - 1

确定每轮需要的次数: j = i + 1 < 数组长度

示例代码:

  1. public static void main(String[] args) {
  2. // 定义数组
  3. int[] arr = {
  4. 10, 0, 2, 8};
  5. // 冒泡排序
  6. int num = 0;
  7. for (int i = 0; i < arr.length - 1; i++) {
  8. // 控制循环多少次(进行多少轮)
  9. for (int j = i; j < arr.length - (i + 1); j++) {
  10. // 控制每轮比较多少次
  11. if (arr[j] > arr[j + 1]) {
  12. num = arr[j];
  13. arr[j] = arr[j + 1];
  14. arr[j + 1] = num;
  15. }
  16. }
  17. }
  18. // 输出数组
  19. System.out.println(Arrays.toString(arr));
  20. }

二分查找

基本查找的弊端: 在数据量特别大的时候,基本查找从前往后寻找的性能是很差的

二分查找:

二分查询性能好,但是二分查找有一个前提是: 必须是排好序的数据。

二分查找, 顾名思义从中间位置开始查找, 比较要查找的数是大于还是小于中间位置的数, 再从满足条件的区间中继续进行二分查找

在这里插入图片描述
在这里插入图片描述

示例代码:

  1. public class Sorting3 {
  2. public static void main(String[] args) {
  3. // 定义数组
  4. int[] arr = {
  5. 10, 20, 25, 30, 38, 42, 49, 55, 58};
  6. // 调用定义的二分查找的方法
  7. System.out.println(binarySearch(arr, 55)); // 7
  8. System.out.println(binarySearch(arr, 120)); // -1
  9. }
  10. /**
  11. * 定义二分查找的方法
  12. * @param arr 排序的数组
  13. * @param num 要找的数组
  14. * @return 存在返回该元素索引, 不存在返回-1
  15. */
  16. public static int binarySearch(int[] arr, int num) {
  17. int min = 0;
  18. int max = arr.length - 1;
  19. while (min <= max) {
  20. int mid = (min + max) / 2;
  21. if (num == arr[mid]) {
  22. return mid;
  23. } else if (num > arr[mid]) {
  24. min = mid + 1;
  25. } else {
  26. max = mid - 1;
  27. }
  28. }
  29. return -1;
  30. }
  31. }

小结: 数组的二分查找的实现步骤

定义变量记录左边和右边位置。

使用while循环控制查询(条件是左边位置<=右边位置)

循环内部获取中间元素索引

判断当前要找的元素如果大于中间元素,左边位置=中间索引+1

判断当前要找的元素如果小于中间元素,右边位置=中间索引-1

判断当前要找的元素如果等于中间元素,返回当前中间元素索引。

发表评论

表情:
评论列表 (有 0 条评论,110人围观)

还没有评论,来说两句吧...

相关阅读

    相关 冒泡排序二分查找

    冒泡排序: 冒泡排序的核心思想是用第一个数依次与以后的数比较,如果有比它大或者比它小的就与它交换位置,那么第一个得到的数就是最大或者最小的;同理用第二个数再执行依次,,,依次