首页 > 编程 > Java > 正文

Java数组高级算法与Arrays类常见操作小结【排序、查找】

2019-11-26 09:10:57
字体:
来源:转载
供稿:网友

本文实例讲述了Java数组高级算法与Arrays类常见操作。分享给大家供大家参考,具体如下:

冒泡排序

冒泡排序原理

冒泡排序代码:

package cn.itcast_01;/* * 数组排序之冒泡排序: *     相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 */public class ArrayDemo {  public static void main(String[] args) {    // 定义一个数组    int[] arr = { 24, 69, 80, 57, 13 };    System.out.println("排序前:");    printArray(arr);    bubbleSort(arr);    System.out.println("排序后:");    printArray(arr);  }  //冒泡排序代码  /*总共需要比较数组长度-1次,x < arr.length - 1   *每一次比较完,下一次就会减少一次元素的比较。第一次比较有0个元素不比,第二次有1个元素不比,,,,所以 y < arr.length - 1 - x   *两两比较,大的往后放   * */  public static void bubbleSort(int[] arr){    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] = temp;        }      }    }  }  // 遍历功能  public static void printArray(int[] arr) {    System.out.print("[");    for (int x = 0; x < arr.length; x++) {      if (x == arr.length - 1) {        System.out.print(arr[x]);      } else {        System.out.print(arr[x] + ", ");      }    }    System.out.println("]");  }}

选择排序

选择排序原理图

选择排序代码

package cn.itcast_02;/* * 数组排序之选择排序: *     从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处 */public class ArrayDemo {  public static void main(String[] args) {    // 定义一个数组    int[] arr = { 24, 69, 80, 57, 13 };    System.out.println("排序前:");    printArray(arr);    //用方法改进    selectSort(arr);    System.out.println("排序后:");    printArray(arr);  }  /*   * 数组排序   * */  public static void selectSort(int[] arr){    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] = temp;        }      }    }  }  // 遍历功能  public static void printArray(int[] arr) {    System.out.print("[");    for (int x = 0; x < arr.length; x++) {      if (x == arr.length - 1) {        System.out.print(arr[x]);      } else {        System.out.print(arr[x] + ", ");      }    }    System.out.println("]");  }}

二分查找法

二分查找法原理

二分法的代码实现:

package cn.itcast_04;/* * 查找: *     基本查找:数组元素无序(从头找到尾) *     二分查找(折半查找):数组元素有序 * * 分析: *     A:定义最大索引,最小索引 *     B:计算出中间索引 *     C:拿中间索引的值和要查找的值进行比较 *       相等:就返回当前的中间索引 *       不相等: *         大  左边找 *         小  右边找 *     D:重新计算出中间索引 *       大  左边找 *         max = mid - 1; *       小  右边找 *         min = mid + 1; *     E:回到B */public class ArrayDemo {  public static void main(String[] args) {    //定义一个数组    int[] arr = {11,22,33,44,55,66,77};    //写功能实现    int index = getIndex(arr, 33);    System.out.println("index:"+index);    //假如这个元素不存在后有什么现象呢?    index = getIndex(arr, 333);    System.out.println("index:"+index);  }  /*   * 两个明确:   * 返回值类型:int   * 参数列表:int[] arr,int value   */  public static int getIndex(int[] arr,int value){    //定义最大索引,最小索引    int max = arr.length -1;    int min = 0;    //计算出中间索引    int mid = (max +min)/2;    //拿中间索引的值和要查找的值进行比较    while(arr[mid] != value){      if(arr[mid]>value){        max = mid - 1;      }else if(arr[mid]<value){        min = mid + 1;      }      //加入判断      if(min > max){        return -1;      }      mid = (max +min)/2;    }    return mid;  }}

Arrays类

package cn.itcast_05;import java.util.Arrays;/* * Arrays:针对数组进行操作的工具类。比如说排序和查找。 * 1:public static String toString(int[] a) 把数组转成字符串 * 2:public static void sort(int[] a) 对数组进行排序 * 3:public static int binarySearch(int[] a,int key) 二分查找 */public class ArraysDemo {  public static void main(String[] args) {    // 定义一个数组    int[] arr = { 24, 69, 80, 57, 13 };    // public static String toString(int[] a) 把数组转成字符串    System.out.println("排序前:" + Arrays.toString(arr));    // public static void sort(int[] a) 对数组进行排序    Arrays.sort(arr);    System.out.println("排序后:" + Arrays.toString(arr));    // [13, 24, 57, 69, 80]    // public static int binarySearch(int[] a,int key) 二分查找    System.out.println("binarySearch:" + Arrays.binarySearch(arr, 57));    System.out.println("binarySearch:" + Arrays.binarySearch(arr, 577));  }}

PS:这里再为大家推荐几款相似的在线工具供大家参考:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.VeVB.COm/aideddesign/paixu_ys

在线JS常见遍历方式性能分析比较工具:
http://tools.VeVB.COm/aideddesign/js_bianli

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数组操作技巧总结》、《Java字符与字符串操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结

希望本文所述对大家java程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表