加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

13-02 Java 数组高级算法,Arrays类

发布时间:2020-12-14 06:09:06 所属栏目:Java 来源:网络整理
导读:冒泡排序 冒泡排序原理 冒泡排序代码: span style="color: #008000;"/* span style="color: #008000;" 数组排序之冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 span style="color: #008000;"*/ span style="color: #000

冒泡排序

冒泡排序原理

冒泡排序代码:

<span style="color: #008000;">/*<span style="color: #008000;">

  • 数组排序之冒泡排序:

  • 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
    <span style="color: #008000;">*/
    <span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArrayDemo {
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
    <span style="color: #008000;">//<span style="color: #008000;"> 定义一个数组
    <span style="color: #0000ff;">int[] arr = { 24,69,80,57,13<span style="color: #000000;"> };
    System.out.println("排序前:"<span style="color: #000000;">);
    printArray(arr);

     bubbleSort(arr);
     System.out.println(</span>"排序后:"<span style="color: #000000;"&gt;);
     printArray(arr);

    }

    <span style="color: #008000;">//<span style="color: #008000;">冒泡排序代码
    <span style="color: #008000;">/<span style="color: #008000;">总共需要比较数组长度-1次,x < arr.length - 1
    每一次比较完,下一次就会减少一次元素的比较。第一次比较有0个元素不比,第二次有1个元素不比,,,,所以 y < arr.length - 1 - x
    *两两比较,大的往后放

    • <span style="color: #008000;">*/
      <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void bubbleSort(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr){
      <span style="color: #ff0000;">for (int x = 0; x < arr.length - 1; x++) {
      for (int y = 0; y < arr.length - 1 - x; y++) {
      if (arr[y] > arr[y + 1]) {
      int temp = arr[y];
      arr[y] = arr[y + 1];
      arr[y + 1] =<span style="color: #000000;"><span style="color: #ff0000;"> temp;
      }
      }
      }
      }

    <span style="color: #008000;">//<span style="color: #008000;"> 遍历功能
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void printArray(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr) {
    System.out.print("["<span style="color: #000000;">);
    <span style="color: #0000ff;">for (<span style="color: #0000ff;">int x = 0; x < arr.length; x++<span style="color: #000000;">) {
    <span style="color: #0000ff;">if (x == arr.length - 1<span style="color: #000000;">) {
    System.out.print(arr[x]);
    } <span style="color: #0000ff;">else<span style="color: #000000;"> {
    System.out.print(arr[x] + ","<span style="color: #000000;">);
    }
    }
    System.out.println("]"<span style="color: #000000;">);
    }
    }

?

选择排序

选择排序原理图

选择排序代码

<span style="color: #008000;">/*<span style="color: #008000;">

  • 数组排序之选择排序:

  • 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
    <span style="color: #008000;">*/
    <span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArrayDemo {
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
    <span style="color: #008000;">//<span style="color: #008000;"> 定义一个数组
    <span style="color: #0000ff;">int[] arr = { 24,13<span style="color: #000000;"> };
    System.out.println("排序前:"<span style="color: #000000;">);
    printArray(arr);

     </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;用方法改进</span>

    <span style="color: #000000;"> selectSort(arr);
    System.out.println("排序后:"<span style="color: #000000;">);
    printArray(arr);

    }
    <span style="color: #008000;">/*<span style="color: #008000;">

    • 数组排序
    • <span style="color: #008000;">*/
      <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void selectSort(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr){
      <span style="color: #ff0000;">for(int x=0; x<arr.length-1; x++){
      for(int y=x+1; y<arr.length; y++){
      if(arr[y] <arr[x]){
      int temp = arr[x];
      arr[x] = arr[y];
      arr[y] =<span style="color: #000000;"><span style="color: #ff0000;"> temp;
      }
      }
      }
      }

    <span style="color: #008000;">//<span style="color: #008000;"> 遍历功能
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void printArray(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr) {
    System.out.print("["<span style="color: #000000;">);
    <span style="color: #0000ff;">for (<span style="color: #0000ff;">int x = 0; x < arr.length; x++<span style="color: #000000;">) {
    <span style="color: #0000ff;">if (x == arr.length - 1<span style="color: #000000;">) {
    System.out.print(arr[x]);
    } <span style="color: #0000ff;">else<span style="color: #000000;"> {
    System.out.print(arr[x] + ","<span style="color: #000000;">);
    }
    }
    System.out.println("]"<span style="color: #000000;">);
    }
    }

?

?二分查找法

二分查找法原理

?

?二分法的代码实现:

<span style="color: #008000;">/*<span style="color: #008000;">

  • 查找:

  • 基本查找:数组元素无序(从头找到尾)

  • 二分查找(折半查找):<span style="color: #ff0000;">数组元素有序

  • 分析:

  • A:定义最大索引,最小索引

  • B:计算出中间索引

  • C:拿中间索引的值和要查找的值进行比较

  • 相等:就返回当前的中间索引

  • 不相等:

  • 大 左边找

  • 小 右边找

  • D:重新计算出中间索引

  • 大 左边找

  • max = mid - 1;

  • 小 右边找

  • min = mid + 1;

  • E:回到B
    <span style="color: #008000;">*/
    <span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArrayDemo {
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
    <span style="color: #008000;">//<span style="color: #008000;">定义一个数组
    <span style="color: #0000ff;">int[] arr = {11,22,33,44,55,66,77<span style="color: #000000;">};

     </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;写功能实现</span>
     <span style="color: #0000ff;"&gt;int</span> index = getIndex(arr,33<span style="color: #000000;"&gt;);
     System.out.println(</span>"index:"+<span style="color: #000000;"&gt;index);
    
     </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;假如这个元素不存在后有什么现象呢?</span>
     index = getIndex(arr,333<span style="color: #000000;"&gt;);
     System.out.println(</span>"index:"+<span style="color: #000000;"&gt;index);

    }

    <span style="color: #008000;">/*<span style="color: #008000;">

    • 两个明确:

    • 返回值类型:int

    • 参数列表:int[] arr,int value
      <span style="color: #008000;">*/
      <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">int getIndex(<span style="color: #0000ff;">int[] arr,<span style="color: #0000ff;">int<span style="color: #000000;"> value){
      <span style="color: #008000;">//<span style="color: #008000;">定义最大索引,最小索引
      <span style="color: #0000ff;">int max = arr.length -1<span style="color: #000000;">;
      <span style="color: #0000ff;">int min = 0<span style="color: #000000;">;

      <span style="color: #008000;">//<span style="color: #008000;">计算出中间索引
      <span style="color: #0000ff;">int mid = (max +min)/2<span style="color: #000000;">;

      <span style="color: #008000;">//<span style="color: #008000;">拿中间索引的值和要查找的值进行比较
      <span style="color: #0000ff;">while(arr[mid] !=<span style="color: #000000;"> value){
      <span style="color: #0000ff;">if(arr[mid]><span style="color: #000000;">value){
      max = mid - 1<span style="color: #000000;">;
      }<span style="color: #0000ff;">else <span style="color: #0000ff;">if(arr[mid]<<span style="color: #000000;">value){
      min = mid + 1<span style="color: #000000;">;
      }

       </span><span style="color: #ff0000;"&gt;//加入判断
       if(min > max){
           return -1</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt;;
       }
      </span> 
       mid </span>= (max +min)/2<span style="color: #000000;"&gt;;

      }

      <span style="color: #0000ff;">return<span style="color: #000000;"> mid;
      }
      }

Arrays类

<span style="color: #0000ff;">import<span style="color: #000000;"> java.util.Arrays;

<span style="color: #008000;">/*<span style="color: #008000;">

  • Arrays:针对数组进行操作的工具类。比如说排序和查找。

  • 1:public static String toString(int[] a) 把数组转成字符串

  • 2:public static void sort(int[] a) 对数组进行排序

  • 3:public static int binarySearch(int[] a,int key) 二分查找
    <span style="color: #008000;">*/
    <span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArraysDemo {
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
    <span style="color: #008000;">//<span style="color: #008000;"> 定义一个数组
    <span style="color: #0000ff;">int[] arr = { 24,13<span style="color: #000000;"> };

     </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; public static String toString(int[] a) 把数组转成字符串</span>
     System.out.println("排序前:" +<span style="color: #000000;"&gt; Arrays.toString(arr));
    
     </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; public static void sort(int[] a) 对数组进行排序</span>

    <span style="color: #000000;"> Arrays.sort(arr);
    System.out.println("排序后:" +<span style="color: #000000;"> Arrays.toString(arr));

     </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; [13,24,80]
     </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; public static int binarySearch(int[] a,int key) 二分查找</span>
     System.out.println("binarySearch:" + Arrays.binarySearch(arr,57<span style="color: #000000;"&gt;));
     System.out.println(</span>"binarySearch:" + Arrays.binarySearch(arr,577<span style="color: #000000;"&gt;));

    }
    }

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读