【发布时间】:2019-11-28 02:20:21
【问题描述】:
我通过两种方式为冒泡排序提出了解决方案。 一是每次都从头到尾检查。另一个也在从头到尾检查,但“结束”越来越小(-1)。因为我们可以保证在每个循环结束时对最后一个进行排序。
在我看来,第一个的时间复杂度是O(n^2),另一个是O(nlogn)。对吗?
第一
var bubbleSort = function(array) {
// Your code here.
let changed = true;
let temp;
while(changed){
changed = false
for(let i=0 ; i<array.length-1 ; i++){
if(array[i] > array[i+1]){
temp = array[i+1];
array[i+1] = array[i];
array[i] = temp;
changed = true;
}
}
}
return array;
};
秒
var bubbleSort = function(array) {
// Your code here.
let temp;
for(let i=0 ; i<array.length-1 ; i++){
for(let j=0 ; j<array.length-1-i ; j++){
if(array[j]>array[j+1]){
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
}
return array;
};
【问题讨论】:
-
不,都是 O(n^2)
-
只有第一个算法是冒泡排序。第二个是选择排序的变体。内部循环处理数组中越来越小的未排序分区。它将最高的项目移动到未排序分区顶部的末尾,然后移动分区栅栏,以便该项目现在位于已排序的分区中。
-
好吧,我们可以将第二个函数称为“气泡味(泡腾?)选择排序”。它通过交换选择最高的项目,这会导致其他项目冒泡靠近未排序数组的顶部。规范选择排序使用某种“查找最大值”功能来找到要删除并放入排序序列的最高项目。 IE。选择排序通常不是交换排序,但在这里它变成了交换排序。
标签: algorithm bubble-sort