内容来自刘宇波老师算法与数据结构体系课
1、冒泡排序
| |
| |
| |
| |
| |
| public class BubbleSort { |
| |
| private BubbleSort() { |
| } |
| |
| |
| |
| |
| public static <E extends Comparable<E>> void sort1(E[] arr) { |
| for (int tail = arr.length - 1; tail >= 1; tail--) { |
| |
| for (int i = 0; i + 1 <= tail; i++) { |
| if (arr[i].compareTo(arr[i + 1]) > 0) swap(arr, i, i + 1); |
| } |
| } |
| } |
| |
| |
| |
| |
| public static <E extends Comparable<E>> void sort2(E[] arr) { |
| for (int tail = arr.length - 1; tail >= 1; tail--) { |
| |
| boolean isSwapped = false; |
| for (int i = 0; i + 1 <= tail; i++) { |
| if (arr[i].compareTo(arr[i + 1]) > 0) { |
| swap(arr, i, i + 1); |
| isSwapped = true; |
| } |
| } |
| |
| if (!isSwapped) return; |
| } |
| } |
| |
| |
| |
| |
| public static <E extends Comparable<E>> void sort3(E[] arr) { |
| for (int tail = arr.length - 1; tail >= 1; ) { |
| |
| int nextTail = 0; |
| for (int i = 0; i + 1 <= tail; i++) { |
| if (arr[i].compareTo(arr[i + 1]) > 0) { |
| swap(arr, i, i + 1); |
| nextTail = i; |
| } |
| } |
| |
| tail = nextTail; |
| } |
| } |
| |
| private static <E> void swap(E[] arr, int a, int b) { |
| E k = arr[a]; |
| arr[a] = arr[b]; |
| arr[b] = k; |
| } |
| } |
2、希尔排序

| |
| |
| |
| |
| public class ShellSort { |
| |
| private ShellSort() { |
| } |
| |
| |
| |
| |
| public static <E extends Comparable<E>> void sort1(E[] arr) { |
| int h = arr.length / 2; |
| while (h >= 1) { |
| for (int start = 0; start < h; start++) { |
| |
| for (int i = start + h; i < arr.length; i += h) { |
| E k = arr[i]; |
| int j; |
| for (j = i; j - h >= start && arr[j - h].compareTo(k) > 0; j -= h) { |
| arr[j] = arr[j - h]; |
| } |
| arr[j] = k; |
| } |
| } |
| h /= 2; |
| } |
| } |
| |
| |
| |
| |
| public static <E extends Comparable<E>> void sort2(E[] arr) { |
| int h = arr.length / 2; |
| while (h >= 1) { |
| |
| for (int i = h; i < arr.length; i++) { |
| E k = arr[i]; |
| int j; |
| for (j = i; j - h >= 0 && arr[j - h].compareTo(k) > 0; j -= h) arr[j] = arr[j - h]; |
| arr[j] = k; |
| } |
| h /= 2; |
| } |
| } |
| |
| |
| |
| |
| public static <E extends Comparable<E>> void sort3(E[] arr) { |
| int h = 1; |
| while (h < arr.length) h = h * 3 + 1; |
| |
| while (h >= 1) { |
| |
| for (int i = h; i < arr.length; i++) { |
| E k = arr[i]; |
| int j; |
| for (j = i; j - h >= 0 && arr[j - h].compareTo(k) > 0; j -= h) arr[j] = arr[j - h]; |
| arr[j] = k; |
| } |
| h /= 3; |
| } |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步