【JAVA基础】【算法】冒泡排序_优化排序,二分法查找_折半检索

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:3787

{}
1.冒泡排序(优化排序) 冒泡排序是最常用的排序算法,再笔试中也非常常见,能手写出冒泡排序可以说是基本的素养。 算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大...

Java基础–基本算法

JAVA主要作为一个后端语言,对逻辑和基本算法的要求是明显高于前端程序员的(个人认为),所以大家平常逻辑性不太好的就需要多多复习和学习来提高自己的水平。

1.冒泡排序(优化排序)

冒泡排序是最常用的排序算法,再笔试中也非常常见,能手写出冒泡排序可以说是基本的素养。

算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢的“浮”到数列的顶端。

冒泡排序算法的运作如下:

比较相邻的元素,如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾最后一对,在这一点,最后的元素回事最大的数。 针对所欲的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较。

代码演示

import java.util.Arrays;
public class Test1 {
   public static void main(String[] args) {
      int[] values = { 3, 1, 6, 2, 9, 0, 7, 4, 5, 8 };
      bubbleSort(values);
      System.out.println(Arrays.toString(values));
   }
   public static void bubbleSort(int[] values) {
      int temp;
      int i;
      // 外层循环:n个元素排序,则至多需要n-1趟循环
      for (i = 0; i < values.length - 1; i++) {
         // 定义一个布尔类型的变量,标记数组是否已达到有序状态
         boolean flag = true;
   /*内层循环:每一趟循环都从数列的前两个元素开始进行比较,比较到无序数组的最后*/
         for (int j = 0; j < values.length - 1 - i; j++) {
            // 如果前一个元素大于后一个元素,则交换两元素的值;
            if (values[j] > values[j + 1]) {
               temp = values[j];
               values[j] = values[j + 1];
               values[j + 1] = temp;
                  //本趟发生了交换,表明该数组在本趟处于无序状态,需要继续比较;
               flag = false;
            }
         }
         //根据标记量的值判断数组是否有序,如果有序,则退出;无序,则继续循环。
         if (flag) {
            break;
         }
      }
   }
}

<hr>

2.二分法查找(折半检索)

二分法检索又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组中,首先给定值key与数组中间位置上元素的关键码key进行比较,如果相等,则检索成功;

否则,若key小,则在数组前半部分中继续进行二分法检索;

若key大,则在数组后半部分中继续进行二分法检索。

这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。

代码示例

    import java.util.Arrays;
public class Test {
   public static void main(String[] args) {
      int[] arr = { 30,20,50,10,80,9,7,12,100,40,8};
      int searchWord = 20; // 所要查找的数
      Arrays.sort(arr); //二分法查找之前,一定要对数组元素排序
      System.out.println(Arrays.toString(arr));
      System.out.println(searchWord+"元素的索引:"+binarySearch(arr,searchWord));
   }
 
   public static int binarySearch(int[] array, int value){
      int low = 0;
      int high = array.length - 1;
      while(low <= high){
         int middle = (low + high) / 2;
         if(value == array[middle]){
            return middle;       //返回查询到的索引位置
         }
         if(value > array[middle]){
            low = middle + 1;
         }
         if(value < array[middle]){
            high = middle - 1;
         }
      }
      return -1;    //上面循环完毕,说明未找到,返回-1
   }
}

<mark>注意:</mark>

二分法检索前一定要对数组进行排序。 如果数组中有两个重复的数,基础二分法查找将不准确。
<hr>

//各位大佬手下留 赞👍

原文地址:https://blog.csdn.net/qq_45495857/article/details/104457772?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168475004016800197081290%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168475004016800197081290&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-19-104457772-null-null.142^v87^insert_down1,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/78c40e834ba74074ad50a6de08ad321f

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复