java - 以 o(n) 或 o(1) 的时间复杂度对整数数组进行排序

标签 java arrays sorting

能够以 o(n) 或更小的时间复杂度对从 1 到 4 的整数数组进行排序(非常简单)的最佳算法是什么?

最佳答案

使用Radix Sort ,即 O(n)

 public void radixsort(int[] input) {
  final int RADIX = 10;
  // declare and initialize bucket[]
  List<Integer>[] bucket = new ArrayList[RADIX];
  for (int i = 0; i < bucket.length; i++) {
    bucket[i] = new ArrayList<Integer>();
  }

  // sort
  boolean maxLength = false;
  int tmp = -1, placement = 1;
  while (!maxLength) {
    maxLength = true;
    // split input between lists
    for (Integer i : input) {
      tmp = i / placement;
      bucket[tmp % RADIX].add(i);
      if (maxLength && tmp > 0) {
        maxLength = false;
      }
    }
    // empty lists into input array
    int a = 0;
    for (int b = 0; b < RADIX; b++) {
      for (Integer i : bucket[b]) {
        input[a++] = i;
      }
      bucket[b].clear();
    }
    // move to next digit
    placement *= RADIX;
  }
}

代码 Ref

关于java - 以 o(n) 或 o(1) 的时间复杂度对整数数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999539/

相关文章:

java - Junit4 与参数化测试

java - 将 PHP 文件上传到 IP 地址

java - 如何在 Java 中创建常量对象?

arrays - 如何完全遍历数组?

Python 无法识别多级索引

java - 打印数组对象时使用 printf 进行格式化

我可以返回指向 VLA 的指针吗?

javascript - 如何找到用户输入的数组的总和?

java - 根据当前日期对日期数组进行排序

c# - SortedList/SortedDictionary 奇怪的行为