冒泡排序
var ArraySort = function (arr) {
if (!arr || arr.length === 0) {
return []
}
for (let i=0; i<arr.length-1; i++) {
for (let j=0; j<arr.length-i-1; j++) {
if(arr[j] > arr[j+1]) {
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr
}
console.time();
console.log(ArraySort([3,5,1,6,7,2,9]))
console.timeEnd();
var BubbleSort = function (arr) {
if (!arr || arr.length === 0) {
return []
}
for (let i=0; i<arr.length-1; i++) {
let isSorted = true;
for (let j=0; j<arr.length-i-1; j++) {
if(arr[j] > arr[j+1]) {
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isSorted = false;
}
}
if (isSorted) break;
}
return arr
}
console.time();
console.log('2',BubbleSort([3,5,1,6,7,2,9]))
console.timeEnd();
var BubbleSort_1 = function (arr) {
if (!arr || arr.length === 0) {
return []
}
let lastExchangeIndex = 0; // 最后一次交换的位置
let sortBorder = arr.length-1; // 每次需要比较到的边界
for (let i=0; i<arr.length-1; i++) {
let isSorted = true; // 标记是否已经有序
for (let j=0; j<sortBorder; j++) {
if(arr[j] > arr[j+1]) {
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isSorted = false;
lastExchangeIndex = j
}
}
sortBorder = lastExchangeIndex;
if (isSorted) break;
}
return arr
}
console.time();
console.log('3',BubbleSort_1([3,5,1,6,7,2,9]))
console.timeEnd();
var BubbleSort_2 = function (arr) {
if (!arr || arr.length === 0) {
return []
}
for (let i=0; i<arr.length/2; i++) {
let isSorted = true; // 标记是否已经有序
for (let j=0; j<arr.length-i-1; j++) { // 奇数
if(arr[j] > arr[j+1]) {
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isSorted = false;
}
}
if (isSorted) break;
isSorted = true;
for (let j=arr.length-i-1; j>i; j--) { // 奇数
if(arr[j] < arr[j+1]) {
let temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
isSorted = false;
}
}
if (isSorted) break;
}
return arr
}
console.time();
console.log('4',BubbleSort_2([3,5,1,6,7,2,9]))
console.timeEnd();