【发布时间】:2015-02-21 18:23:56
【问题描述】:
数组 i/p : 1 0 0 2 1 0 2 1
注意:只有 3 个数字,即 0,1,2。 我们必须使用的一个函数是:SWAP(arr,index1,index2) 实现方法是: 无效排序(int arr[],int 长度)
预期 o/p:0 0 0 1 1 1 2 2
【问题讨论】:
标签: c++ performance optimization
数组 i/p : 1 0 0 2 1 0 2 1
注意:只有 3 个数字,即 0,1,2。 我们必须使用的一个函数是:SWAP(arr,index1,index2) 实现方法是: 无效排序(int arr[],int 长度)
预期 o/p:0 0 0 1 1 1 2 2
【问题讨论】:
标签: c++ performance optimization
有许多算法可以对数字数组进行排序。最简单的——冒泡排序的时间复杂度为 O(n2),空间复杂度为 O(1)。
更多 O(n2) 排序算法:选择排序和插入排序。
但是,有更好的算法可以实现 O(n.logn) 的时间复杂度 - 合并排序、快速排序等。
只有 3 个数字是什么意思:0,1,2。 如果输入是固定的,并且我们知道只有这 3 个数字,那么最简单的排序方法是计算每个数字的出现次数。对于这个例子:
occurrences[0] = 3;
occurrences[1] = 3;
occurrences[2] = 2;
然后您可以简单地写入输出数组,每个数字重复出现次数[] 中的次数。 该解决方案的时间复杂度:O(m) 该解决方案的空间复杂度:O(m) 这里要注意的重要一点是“m”是可能的数字的数量,所以这里 m = 3 而不是输入数组中的整数数量 - 我们称之为“n”。
【讨论】: