为什么说选择排序的算法复杂度是O(n2) ?

发布于 2022-09-12 02:45:24 字数 587 浏览 15 评论 0

试了下,远不到O(n^2)
下面的例子输出为105次排序,不到255次(15x15)一半?

var arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]

var count = 0

var len = arr.length
for (let i = 0; i < len - 1; i++) { // 最后一个不用排
    let minIndex = i
    for (let j = i + 1; j < len; j++) { // 从下一个开始找最小值
        count++
        if (arr[minIndex] > arr[j]) {
            minIndex = j
        }
    }
    const tmp = arr[minIndex]
    arr[minIndex] = arr[i]
    arr[i] = tmp
}

console.log(arr, count)
// [2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50] 105

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情愿 2022-09-19 02:45:24

大 O 复杂度人家全称叫时间渐进复杂度,算的是当 n 趋近无穷大时的最高阶项,也就是不包含低阶项和首项常系数,因为当 n 无穷大时,低阶项和常系数对结果就几乎没有影响了(这几个概念名词不明白就说明大一上学期的高数就没听过课)。

实际上在不同情况下有最坏、最好、平均、均摊四种可能的结果。不特殊指明一般就指平均复杂度(大多数情况平均、最好和最坏三者应该相同)。

你这个例子里确实是 105 次循环没错,因为本来实际的值也是这个( (15 * (15 - 1)) / 2 = 105 )。

(n * (n - 1)) / 2,去掉常数项和低阶项 -1 和 1/2,复杂度即为 O(n^2)。

还不明白怎么算的,捡起来大一上高数课本吧,这已经跟编程知识无关了,而是数学知识了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文