public class commonAlgorithm { /** * 夿ä¸ä¸ªæ°æ¯å¦ä¸ºç´ æ° * * @param num * @return */ private static boolean isPrime(int num) { if (num <= 1) return false; if (num == 2) return true; if (num % 2 == 0) return false; for (int x = 3; x * x <= num; x += 2) if (num % x == 0) return false; return true; } // 计ç®arr[l...n)è¿ä¸ªåºé´å æææ°åçå private static int sum(int[] arr, int l) { if (l == arr.length) return 0; return arr[l] + sum(arr, l + 1); } /** * äº¤æ¢æ°ç»å ç´ * * @param arr * @param i * @param j */ private static void swap(Object[] arr, int i, int j) { if (i < 0 || i >= arr.length) throw new IllegalArgumentException("i is out of bound."); if (j < 0 || j >= arr.length) throw new IllegalArgumentException("j is out of bound."); Object temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } /** * æ±nçå * * @param n * @return */ private static int sum(int n) { if (n < 0) throw new IllegalArgumentException("n should be greater or equal to zero."); int ret = 0; for (int i = 0; i <= n; i++) ret += i; return ret; } /** * 翻转æ°ç» * * @param arr */ private static void reverse(Object[] arr) { int n = arr.length; for (int i = 0; i < n / 2; i++) swap(arr, i, n - 1 - i); } /** * éæ©æåº * * @param arr * @param n */ private static void selectionSort(Comparable[] arr, int n) { for (int i = 0; i < n; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) if (arr[j].compareTo(arr[minIndex]) < 0) minIndex = j; swap(arr, i, minIndex); } } /** * äºåæ¥æ¾ * * @param arr * @param n * @param target * @return */ public static int binarySearch(Comparable[] arr, int n, Comparable target) { int l = 0, r = n; // å¨[l...r)çèå´é寻æ¾target while (l < r) { // å½ l == r æ¶, åºé´[l...r)æ¯ä¸ä¸ªæ æåºé´ int mid = l + (r - l) / 2; if (arr[mid].compareTo(target) == 0) return mid; if (target.compareTo(arr[mid]) > 0) l = mid + 1; // targetå¨[mid+1...r)ä¸; [l...mid]ä¸å®æ²¡ætarget else // target < arr[mid] r = mid; // targetå¨[l...mid)ä¸; [mid...r)ä¸å®æ²¡ætarget } return -1; } }