Java学习笔记——Java语言基础(十三)(数组排序、Arrays工具类、二分查找)
2020-01-15 11:29
597 查看
一、数组排序
1.1 冒泡排序
import java.util.Arrays; public class BubbleSort2 { public static void main(String[] args) { int[] arr={12,23,45,87,1,54,8,11,12}; BubbleSortMain.sort(arr); System.out.println(Arrays.toString(arr)); } } class BubbleSortMain{ public static void sort(int[] arr){ for (int j = 0; j < arr.length-1; j++) { for (int i = 0; i < arr.length-1-j; i++) { if (arr[i]>arr[i+1]){ int temp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } } } } }
1.2 插入排序
import java.util.Arrays; public class InsertSort { public static void main(String[] args) { int[] arr={12,45,8,788,456,132}; InsertSortMain.sort(arr); System.out.println(Arrays.toString(arr)); } } class InsertSortMain{ public static void sort(int[] arr) { ///控制次数 for (int i = 1; i < arr.length; i++) { //当前元素小于我的前一个元素得交换 int j=i; while (j>0&&arr[j]<arr[j-1]){ int temp=arr[j]; arr[j]=arr[j-1]; arr[j-1]=temp; j--; } } } }
1.3 快速排序
import java.util.Arrays; public class QuickSort { public static void main(String[] args) { int[] arr={12,45,78,11,54,62,48}; QuickSortMain.quicksort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } } class QuickSortMain{ public static void quicksort(int[] arr,int start,int end){ if (start<end){ int index=getIndex(arr,start,end); quicksort(arr,start,index-1); quicksort(arr,index+1,end); } } private static int getIndex(int[] arr, int start, int end) { int i=start; int j=end; int x=arr[i]; while (i<j){ //从后往前找数,大的不变,小的进行转换 while (i<j&&arr[j]>=x){ j--; } if (i<j){ arr[i]=arr[j]; i++; } //从前往后找,小的不变,大的进行转换 while (i<j&&arr[i]<x){ i++; } if (i<j){ arr[j]=arr[i]; j--; } } arr[i]=x; return i; } }
1.4 选择排序
import java.util.Arrays; public class SelectionSort { public static void main(String[] args) { int[] arr={123,434,25,253,767,345,23}; SelectionSortMian.sort(arr); System.out.println(Arrays.toString(arr)); } } class SelectionSortMian{ public static void sort(int[] arr) { //次数 for (int index = 0;index < arr.length-1; index++) { for (int i =1+index; i < arr.length; i++) { if (arr[i]<arr[index]){ int temp=arr[i]; arr[i]=arr[index]; arr[index]=temp; } } } } }
1.5 希尔排序
import java.util.Arrays; public class ShellSort { public static void main(String[] args) { int[] arr = {15, 5, 8, 4, 68, 84, 75, 51, 33, 45, 89}; int[] sort = ShellSortMain.sort(arr); System.out.println(Arrays.toString(sort)); } } class ShellSortMain { public static int[] sort(int[] arr) { int gap = arr.length / 2; while (gap > 0) { for (int i = gap; i < arr.length; i++) { int num = i - gap; int temp = arr[i]; while (num >= 0 && arr[num] > temp) { arr[num + gap] = arr[num]; num -= gap; } arr[num + gap] = temp; } gap /= 2; } return arr; } }
二、Arrays类
1.针对数组进行的操作的工具类
import java.util.Arrays; public class Test01 { public static void main(String[] args) { //Arrays工具类,提供排序,查找等功能 // public static String toString () 遍历 int[] arr={20,30,40,50,60,70}; String s = Arrays.toString(arr); System.out.println(s);//[20, 30, 40, 50, 60, 70] // public static void sort () 排序 int[] arr2={24,51,23,13,25,14,26,14}; Arrays.sort(arr2); System.out.println(Arrays.toString(arr2));//[13, 14, 14, 23, 24, 25, 26, 51] //public static int binarySearch ( int[] a, int key) //二分查找 前提:元素是有序的 int i = Arrays.binarySearch(arr, 50); System.out.println(i);//3 //对比两个数组中的元素是否一致 boolean equals = Arrays.equals(arr, arr2); System.out.println(equals);//false //static int[] copyOf ( int[] original, int newLength) //复制旧数组中的元素到一个新的数组中,新的数组长度是newLength 从0开始复制旧数组 int[] ints = Arrays.copyOf(arr, 4); System.out.println(Arrays.toString(ints));//[20, 30, 40, 50] //static int[] copyOfRange ( int[] original, int from, int to) //复制旧数组中的指定范围间的几个元素到新数组中,含头不含尾 int[] ints1 = Arrays.copyOfRange(arr, 2, 5); System.out.println(Arrays.toString(ints1));//[40, 50, 60] } }
三、二分查找
1.二分查找的前提,数组是有序的。
public class Test02 { public static void main(String[] args) { int[] arr={10,20,30,40,50,60,70,80,90}; int index = getIndex(arr, 40); System.out.println(index); } private static int getIndex(int[] arr, int value) { int maxIndex=arr.length-1; int minIndex=0; int centerIndex=(maxIndex+minIndex)/2; while (minIndex<=maxIndex){ if (value==arr[centerIndex]){ return centerIndex; }else if (value<=arr[centerIndex]){ maxIndex=centerIndex-1; }else if (value>=arr[centerIndex]){ minIndex=centerIndex+1; } //重新计算中间索引的值 centerIndex=(maxIndex+minIndex)/2 ; } return -1; } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
- Java学习笔记(五)--二维数组 冒泡排序 选择排序 Arrays数组工具类
- 【JavaSE_学习笔记】排序、二分查找与数组工具类
- Java基础学习笔记13——(StringBuffer的使用,数组高级,Arrays工具类,Integer和Character等包装类)
- JAVA基础复习十三-StringBuffer、数组排序、二分查找、自动拆装箱
- 2017/12/31Java基础学习——数组排序のArrays工具类的Arrays.sort()方法
- JAVA基础day04 数组学习 排序和查找基本算法
- Java基础学习笔记 -- 10(数组排序)
- java基础-使用Arrays管理数组排序,复制,查找,填充
- 黑马程序员--数组的排序和查找--java学习日记2(基础知识)
- java学习笔记10:java语言数组常用排序(冒泡排序、选择排序、快速排序,直接插入排序)
- java基础知识4--数组,排序,二分查找
- 黑马程序员_Java基础_04数组main函数args详解、数组排序、二分查找实例
- 【Java学习笔记】基础知识学习5【数组排序,复制】
- NO4.java学习笔记(数组、数组的操作【遍历、排序、查找】)
- Java学习笔记_6_数组的排序和查找
- JAVA学习笔记(4-2-数组排序|查找)
- java语言基础——java自带数组工具类Arrays
- 黑马程序员——Java学习笔记——数组的排序和查找
- 黑马程序员java学习笔记——Collections、Arrays工具类和其他对象