> 文档中心 > 「冲刺大厂基础1」

「冲刺大厂基础1」


冲刺大厂基础1

如果大家有什么问题,可以随时进行评论,每天晚上会进行解答。

如果大家把这个系列的代码掌握,可以达到一个很好的基础

1.选择排序

思路:每次从数组中选择一个最小值,依次放到数组[0…]位置

public class Code01_SelectionSort {    public static void selectionSort(int[] arr){ if (arr == null || arr.length < 2){     return; } for(int i = 0; i < arr.length - 1; i++){     int minIndex = i;     for(int j = i + 1; j < arr.length - 1; j++){  minIndex = arr[j] < arr[minIndex] ? j : minIndex;     }     swap(arr, i, minIndex); }    }    public static void swap(int[] arr, int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;    }}

2.冒泡排序

思路:从数组0位置开始,依次两两相比,每一次比较,最大的数会放到最后。

public class Code02_BubbleSort {    public static void bubbleSort(int[] arr){ if(arr == null || arr.length < 2){     return; } for(int end = arr.length - 1 ; end > 0; end--){     for(int i = 0; i < end; i ++){  if(arr[i + 1] < arr[i]){      int temp = arr[i];      arr[i] = arr[i + 1];      arr[i + 1] = temp;  }     } }    }}

3.插入排序

思路:依次做到[0, 0]位置有序,[0, 1]位置有序,…,[0,N]位置有序。

public class Code03_InsertionSort {    public static void insertionSort(int[] arr){ if(arr == null || arr.length < 2){     return; } for(int end = 1; end < arr.length; end++){     for(int i = end - 1; i >= 0 ; i--){  if(arr[i + 1] < arr[i]){      int temp = arr[i + 1];      arr[i + 1] = arr[i];      arr[i] = temp;  }     } }    }}

4.指定升序(降序)数组中是否存在指定值

思路:如果遍历数组所有位置,时间复杂度为O(N)。可以注意到,给定数组为有序数组,所以,采用二分查找,可以做到时间复杂度为O(logN)。

public class Code04_BSExist {    public static boolean exist(int[] sortedArr, int num){ if(sortedArr == null || sortedArr.length == 0){     return false; } int L = 0; int R = sortedArr.length - 1; while(L < R){     int mid = L + ((R - L) >> 1);     if(sortedArr[mid] == num){  return true;     }else if(sortedArr[mid] < num){  L = mid + 1;     }else{  R = mid - 1;     } } return sortedArr[L] == num;    }}