题目 2 给一个数组 a={8,3,5,2,7,4,6,1},排序,要求用 O(n)的时间 复杂度,O(1)的空间复杂度做。
public class Main6 {
public static void sort(int count[], int a[], int len) {
for (int i = 0; i < len; i++) {
count[a[i]]++;
}
for (int i = 0, j = 0; i < 65536; i++) {
if (count[i] != 0) {
a[j++] = i;
count[i]--;
i--;
}
}
}
public static void main(String[] args) {
int count[] = new int[65536];
int a[] = { 8, 3, 5, 2, 7, 4, 6, 1 };
int len = a.length;
sort(count, a, len);
for (int i = 0; i < len; i++) {
System.out.println(a[i] + "----");
}
}
}
有人说这个是用空间换取时间的非排序算法,请问这个算法怎么理解啊,想不通?大佬说说呗