题目 2 给一个数组 a={8,3,5,2,7,4,6,1},排序,要求用 O(n)的时间 复杂度,O(1)的空间复杂度做。

Sunlalalla 2017-08-12 08:26:07
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] + "----");
}

}
}
有人说这个是用空间换取时间的非排序算法,请问这个算法怎么理解啊,想不通?大佬说说呗
...全文
220 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ps45221 2017-08-14
  • 打赏
  • 举报
回复
这代码肯定不对,既然题目要求是空间复杂度是O(1),那么就不应该有额外的内存(这里count数组)。 这题目以前见过,是靠规律来解的: 原数组,a={8,3,5,2,7,4,6,1} 结果数组,b={1,2,3,4,5,6,7,8} 可以发现a[ i ] 在 b 中的位置是 b[ a[i] - 1],实际代码中可以用重用a数组, 不用申请额外内存,注意处理交换问题就行了

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧