1,2,3,5,6,4 它已经排序了99%,并且有40K个元素。
我可以将它们放入数组、列表、链表等数据结构中,
但是我不知道最快的排序方法!
以下网站比较了常见的排序算法 - 似乎在集合接近排序时,插入排序会胜出。
"当我坐在键盘前编写冒泡排序时,他们都笑了起来..."
但说真的:冒泡排序虽然接近,但并不完美。冒泡排序一直向一个方向移动,所以如果数组顶端附近有一个低值,并且比较位置一直"冒泡"上升,那么数据项对当前的下降需要经过许多次主循环迭代。这几乎是最坏的情况,对于冒泡排序来说是灾难性的。
但是有一种改进的冒泡排序,有时被称为电梯鸡尾酒排序,其中气泡交替地向两个方向移动:一次向上,一次向下,重复进行。这使得单个元素可以在单次遍历(或实际上是2次遍历)中移动很长的距离,而遍历次数与需要移动的元素数量成比例。对于少量未排序的元素,这可以接近效率。
我认为对于一般情况,Marek回答中的第二个链接会更快。冒泡/电梯鸡尾酒排序的优点在于它非常简单,几乎是傻瓜式的,而且工作量不大。
和大多数这类问题一样,答案是“那要看情况……”。你在意排序是否稳定,即键值相等的元素在排序后是否保留其原始相对顺序?你只关心原始速度吗?实现的简单性重要吗?内存消耗是否重要?
个人而言,我总是会选择稳定的排序算法,因为我愿意为我认为“合理”的行为牺牲一些原始速度,而非稳定排序太常见了,它往往是“不合理”的。所以我倾向于使用归并排序算法,它快速且相当简单,但确实使用了额外的内存。归并排序的另一个优点是,如果数据已经排序,则其复杂度为O(n),因此对于几乎排序的数据,它应该接近O(n)。
你的情况可能有所不同。
性能是否关键(由分析器验证)?否则,只需使用您的框架/语言的默认排序(可能是快速排序)。它将表现良好。