排序算法是排列列表元素的算法。最常用的顺序是数字顺序和词典顺序,以及升序或降序。在本文中,我们将探讨不同的排序算法,并考虑从Leetcode对数组进行排序的问题。
描述
给定一个整数数组,按升序对数组进行排序。nums
示例 1:
示例 2:
约束:
溶液
有几个选项可以解决此问题:
气泡排序
气泡排序是最简单的排序算法,如果相邻元素的顺序错误,则通过重复交换它们来工作。此算法不适用于大型数据集,因为它具有时间复杂度 O(n²) 和 s速度复杂度:O(1)。
正如我们之前所讨论的未优化的气泡排序的实现。即使数组已排序,代码也将以 O(n²) 复杂性运行。让我们看看如何实现优化的气泡排序算法。
快速排序
快速排序是一种基于分而治之算法原理的排序算法。
通过选择引用元素(从数组中选择的元素)将数组划分为子数组。分割数组时,必须定位锚点元素,以便小于锚点的元素保留在锚点的左侧(较小),大于锚点的元素保持在锚点的右侧(较大)。
少和右大也使用相同的方法进行拆分。此过程一直持续到每个子数组包含一个元素。
最后,将元素连接成一个排序数组。
时间复杂度 O(n⋅log(n)) 和 s速度复杂度: O(log(n))。
合并排序
合并排序是最流行的排序算法之一,也基于分而治之算法的原理。
在这里,一个问题被分为多个子问题。每个子问题都是单独解决的。最后,将子问题组合在一起,形成最终的解决方案。
时间复杂度 O(n⋅log(n)) 和速度复杂度:O(n)。