/** *冒泡 * @author gx * @time 2022/1/21 10:47 * 把每个元素依次和后面的每个元素进行比较 */ public class BubbleSort { public static void main(String[] args) { int[] data = {2,3,4,523,23,433,21,213,43,432}; System.out.println("冒泡前:\n"+ java.util.Arrays.toString(data)); bubbleSort(data); System.out.println("冒泡后:\n"+ java.util.Arrays.toString(data)); } private static void bubbleSort(int[] data) { int length = data.length; for (int i = 1; i < length; i++) { for (int j = 0; j < length - 1; j++) { if (data[j]>data[j+1]){//相邻元素对比,元素换位置 int temp = data[j+1]; data[j+1] = data[j]; data[j] = temp; } } } } }
/** * @author gx * @time 2022/1/21 11:10 * 快排总结:1.找一个基准点temp * 2.分别用i,j从数组左,右获取元素,与temp比较 * 3.当i>temp,j<temp的时候进行交换元素 * 4.遍历完后temp左边都是比他小的,右边都是大于的 * 5.再递归左右 */ public class QuickSort { public static void main(String[] args) { int[] data = {23,43,234,3,24,32,432,87,8753,32}; System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); quickSort(data, 0, data.length - 1); System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); } private static void quickSort(int[] data, int low, int high) { int i,j,temp,t; if (low>high){ return; } i = low; j = high; temp = data[low]; while (i< j ){ while (temp<=data[j]&&i<j){ j--; } while (temp >=data[i]&&i<j){ i++; } if (i<j){ t=data[j]; data[j] =data[i]; data[i] =t; } } data[low] = data[i]; data[i]=temp; quickSort(data,low,j-1); quickSort(data,j+1,high); } }
package com.atguigu.jxc; import java.util.ArrayList; import java.util.List; /** * @author gx * @time 2022/1/21 12:09 */ public class BinarySearch { public static void main(String[] args){ //注意:需要对已排序的数组进行二分查找 int[] data = {1, 8, 10, 89, 1000, 1000,1000, 1234}; List<Integer> list = binarySearch(data, 0, data.length, 1000); System.out.println(list); } private static List<Integer> binarySearch(int[] data, int left, int right, int find) { //先创建一个集合放找到的索引 ArrayList<Integer> list = new ArrayList<>(); if (left>right){//退出条件 return list; } int mid = (left+right)/2; int midVal = data[mid]; if (find < midVal){//向左 return binarySearch(data,left,mid-1,find); }else if (find > midVal){//向右 return binarySearch(data,mid+1,right,find); }else {//相等,如果下标是5,那么可能有相同的,左右各来一位,4,6,每次都看一下 int temp= mid-1; while (true){ if (temp <0 || data[temp] != find){ break; } if (data[temp] == find){ list.add(temp); } temp = temp-1; } list.add(mid); temp = mid+1; while (true){ if (temp>data.length-1 || data[temp] != find){ break; } if (data[temp] == find){ list.add(temp); } temp = temp+1; } return list; } } }