排序之一:基数排序

  • 介绍
    基数排序法属于分配模式排序方式之一。它是按个位数、十位数、百位数、以此往上推来进行排序的,看看下边的演示就很容易明白怎么回事儿了。元素和元素之间不需要比较,这是它的神奇之处!
  • 演示
    代码如下:
private static void radixSort() {
    int data[] = {60, 43, 802, 17, 3, 74, 22, 91, 105};
    int i, j, k, n, m;
    for (n = 1; n <= 100; n *= 10) {
        int[][] tmp = new int[10][data.length]; // 都会存放在这个二维数组里
        for (i = 0; i < data.length; i++) {
            m = (data[i] / n) % 10;
            tmp[m][i] = data[i]; // 
        }
        k = 0;
        for (i = 0; i < 10; i++) {
            for (j = 0; j < data.length; j++) {
                if (tmp[i][j] != 0) {
                    data[k] = tmp[i][j];
                    k++;
                }
            }
        }
     }
}

运行结果:


排序之一:基数排序_第1张图片
基数排序.png
  • 分析
  1. 在所有情况下,时间复杂度均为O(n*log以p为底的k);
  2. 是稳定排序法;
  3. 基数排序法会用到很大的额外空间来存放列表数据,其空间复杂度为O(n*p);
  4. 若n很大,p固定或者很小,次排序法效率很高。
    (n是原始数据的个数,p是数据字符数,k是原始数据的最大值)

其他排序:
插入排序、选择排序、冒泡排序、希尔排序、快速排序

你可能感兴趣的:(排序之一:基数排序)