Java爱好者的家,请加群
435264740
最近整理了一个简单的排序工具类,需要的可以拿走
支持冒泡、快排,选择、插入、归并
并且支持传入升降序参数
/** * @author: 大表哥 * @description: 常用排序实现 */ public class SortUtil { private SortUtil() { super(); } public static void bubbleSort(int[] array, boolean isAsc) { for (int i = 0; i < array.length - 1; i++) { for (int j = i; j < array.length; j++) { if (isAsc ? array[i] > array[j] : array[i] < array[j]) { int temp = array[j]; array[j] = array[i]; array[i] = temp; } } } } public static void quickSort(int[] array, int start, int end, boolean isAsc) { if (start < end) { int base = array[start]; int i = start; int j = end; int temp; while (i <= j) { while (isAsc ? (array[i] > base) && (i < end) : (array[i] < base) && (i < end)) { i++; } while (isAsc ? (array[j] < base) && (j > start) : (array[j] > base) && (j > start)) { j--; } if (i <= j) { temp = array[j]; array[j] = array[i]; array[i] = temp; i++; j--; } } if (start < j) { quickSort(array, start, j, isAsc); } if (end > i) { quickSort(array, i, end, isAsc); } } } public static void selectSort(int[] array, boolean isAsc) { int temp; int index; for (int i = 0; i < array.length; i++) { index = i; for (int j = i + 1; j < array.length; j++) { if (isAsc ? array[index] > array[j] : array[index] < array[j]) { index = j; } } temp = array[index]; array[index] = array[i]; array[i] = temp; } } public static void insertSort(int[] array, boolean isAsc) { int index; int temp; for (int i = 1; i < array.length; i++) { temp = array[i]; // temp > array[index - 1]时 就该将temp插入该位置了 不需要移位了 for (index = i; index > 0 && (isAsc ? temp < array[index - 1] : temp > array[index - 1]); index--) { array[index] = array[index - 1]; } array[index] = temp; } } public static void mergeSort(int[] array, int left, int right, boolean isAsc) { if (left < right) { int center = (left + right) / 2; mergeSort(array, left, center, isAsc); mergeSort(array, center + 1, right, isAsc); merge(array, left, center, right, isAsc); } } private static void merge(int[] array, int left, int center, int right, boolean isAsc) { int tempArray[] = new int[array.length]; int tempIndex = left;// 新数组下标 int index = left;// 放回原数组时使用 int mid = center + 1; while (left <= center && mid <= right) { if (isAsc ? array[left] <= array[mid] : array[left] >= array[mid]) { tempArray[tempIndex++] = array[left++]; } else { tempArray[tempIndex++] = array[mid++]; } } while (left <= center) { tempArray[tempIndex++] = array[left++]; } while (mid <= right) { tempArray[tempIndex++] = array[mid++]; } while (index <= right) { array[index] = tempArray[index]; index++; } } }