友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

排序

.1. 选择排序

selection sort 02

.2. 冒泡排序

bubble sort overview
bubble sort 02

.3. 插入排序

insertion sort overview
insertion sort 02

.4. 快速排序

quick sort overview
quick sort 01
quick sort 02
quick sort 03

.5. 归并排序

meger sort 03
merge sort 01
merge sort 02
merge sort 03

.6. 希尔排序

shell sort 00
这个动图第一步很好!后面不好!
shell sort 01
shell sort 02
shell sort 03
shell sort 04

.7. 堆排序

.8. 桶排序

bucket sort overview

.9. 计数排序

counting sort overview

.10. 基数排序

基数排序通过从低位到高位,对数字的每一位进行排序来获得排序结果。比较适合数量不多,但是每个数字之间相差很大的情况。而且时间复杂度是 \(O(nk)\),n 表示数量, k 表示最大位数。

radix sort overview
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
 * 基数排序
 *
 * @author D瓜哥 · https://www.diguage.com
 * @since 2025-06-29 15:45:01
 */
public void radixSort(int[] array) {
  if (null == array || array.length < 2) {
    return;
  }
  int max = Arrays.stream(array).max().orElse(0);
  int length = array.length;
  for (int exp = 1; exp < max; exp *= 10) {
    int[] counter = new int[10];
    for (int num : array) {
      // 获取指定位的值
      int digit = (num / exp) % 10;
      counter[digit]++;
    }
    // 将数量从小向大汇总,
    // 稍作处理即可映射出每个数字应该存储的坐标
    for (int i = 1; i < 10; i++) {
      counter[i] += counter[i - 1];
    }
    // 存储临时结果
    int[] temp = new int[length];
    for (int i = length - 1; i >= 0; i--) {
      int digit = (array[i] / exp) % 10;
      // counter[digit] 是一个数量统计,-1 是指向应该存储的坐标
      int index = counter[digit] - 1;
      temp[index] = array[i];
      counter[digit]--;
    }
    for (int i = 0; i < length; i++) {
      array[i] = temp[i];
    }
  }
}

.10.1. 经典题目