java常用演算法整理
阿新 • • 發佈:2018-12-11
做移動端的同學們經常會忽略演算法使用,因為平時開發後臺資料已經處理好了,前端更多的是動畫邏輯,佈局邏輯等,但是演算法重要性毋庸置疑,好的運用演算法可以增加程式效率和提升程式碼質量,這裡整理一下常見的面試中遇到的演算法:
//二分法查詢 public static int search(int[] arr, int key){ int start=0; int end=arr.length-1; while (start<=end) { int mid = (end+start)/2; if (key<arr[mid]) { end=mid-1; }else if (key>arr[mid]){ start=mid+1; }else { return mid; } } return -1; } //交換 public static void swap(int[] arr, int i, int j){ //普通 // int tmp=arr[i]; // arr[i]=arr[j]; // arr[j]=tmp; //位運算 arr[i]^=arr[j]; arr[j]^=arr[i]; arr[i]^=arr[j]; } //插入排序 升序 public static void insertSort(int[] a) { int i, j, insertNote;// 要插入的資料 for (i = 1; i < a.length; i++) {// 從陣列的第二個元素開始迴圈將陣列中的元素插入 insertNote = a[i];// 設定陣列中的第2個元素為第一次迴圈要插入的資料 j = i - 1; while (j >= 0 && insertNote < a[j]) { a[j + 1] = a[j];// 如果要插入的元素小於第j個元素,就將第j個元素向後移動 j--; } a[j + 1] = insertNote;// 直到要插入的元素不小於第j個元素,將insertNote插入到陣列中 } } //氣泡排序 升序 public static void select(int[] arr){ for (int i=0; i<arr.length-1; i++) { for (int j=0; j<arr.length-1-i;j++) { if (arr[j]>arr[j+1]) { int tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } } // 選擇排序升序 public static void selectSort(int[] arr){ for (int i = 0; i < arr.length; i++) { int tmp = arr[i]; int index=i; for (int j = i+1; j < arr.length; j++) { if (arr[j]<tmp) { tmp=arr[j]; index=j; } } if (index!=i) { //交換 arr[index]=arr[i]; arr[i]=tmp; } } } //去重 public static void searchRepeatIndex(int[] arr){ for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if (arr[i]==arr[j]) { System.out.println("重複元素下標:"+i); break;//去掉這句可以查詢重複次數 } } } }