Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign up【每日一题】- 2020-03-23 - 如何优化冒泡排序在数组近乎有序的情况下的效率 #324
Comments
function advanceBubbleSort1(arr){
let flag;
for(let i = 1, len = arr.length; i <= len - 1; i++){
flag = false; //每轮一开始都必须重新设置标志
for(let j = 0; j < len - i; j++){
if(arr[j] > arr[j + 1]){
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
if(flag === false){
break;
}
}
return arr;
}
function advanceBubbleSort2(arr){
let k = 0;
let n = arr.length;
for(let i = 1, len = arr.length; i <= len - 1; i++){
k = n; //每一轮 都需重新设置到 上一轮冒泡结束的位置
n = 0;
for(let j = 0; j < k - 1; j++){
if(arr[j] > arr[j + 1]){
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
n = j + 1;
}
}
}
return arr;
} |
|
@twinkle77 没明白你的算法是如何保证正向有序和逆向有序都取得不错效率的? 你的算法难道不是只可以处理其中一种情况么? |
|
确实不对 没考虑到逆向有序的情况 @azl397985856 |
function bubbleSort(array, asc = true) {
const result = Array.from(array);
const count = array.length - 1;
let border = count;
let borderTemp = 0;
for (let i = 0; i < count; i += 1) {
let isSorted = true;
for (let j = 0; j < border; j += 1) {
if (asc ? (result[j] > result[j+1]) : (result[j] < result[j+1])) {
[result[j], result[j+1]] = [result[j+1], result[j]];
isSorted = false;
borderTemp = j;
}
console.log(`第${i+1}次循环的第${j+1}次对比:`, result.toString());
}
if (isSorted) {
break;
}
border = borderTemp;
}
return result;
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
对于数组[1, 2, 3, 4] 和 [4, 3, 2, 1] 你的冒泡排序算法是否都能获得不错的效率?