feat: 添加鸡尾酒排序

This commit is contained in:
LouisFonda 2024-02-21 21:36:34 +08:00
parent f3fe3b0480
commit 167bb9f481
2 changed files with 34 additions and 5 deletions

View File

@ -1,10 +1,15 @@
import {generateRandomArray, measureTime} from "../util/index.mjs"
import { bubbleSort, bubbleSort2, bubbleSort3 } from "./bubble-sort.mjs"
import { bubbleSort, bubbleSort2, bubbleSort3, cocktailSort } from "./bubble-sort.mjs"
const arr = generateRandomArray(10000)
const arr2 = generateRandomArray(10000)
const arr3 = generateRandomArray(10000)
measureTime(bubbleSort, arr)
measureTime(bubbleSort2, arr2)
measureTime(bubbleSort3, arr3)
// const arr3 = generateRandomArray(10000)
// measureTime(bubbleSort, arr)
// measureTime(bubbleSort2, arr2)
// measureTime(bubbleSort3, arr3)
// 鸡尾酒排序测试
measureTime(cocktailSort, arr)
measureTime(bubbleSort, arr2)

View File

@ -46,3 +46,27 @@ export function bubbleSort3(arr) {
k = swapPos // 把最后一次交换的位置给k之后的排序支队1 - n-k的元素进行比较因为之后的元素都是有序的
}
}
// 鸡尾酒排序(冒泡排序变形)
export function cocktailSort(arr) {
let left = 0, right = arr.length - 1, index;
while(left < right) {
// 大的排在后面
for (let i = left;i < right;i++) {
if (arr[i] > arr[i+1]) {
swap(arr, i, i+1)
index = i
}
}
// 第一轮排完之后index右侧的数字都是有序的,只需从index开始排就行重点
right = index
// 小的排前面
for (let i = right;i > left;i--) {
if (arr[i] < arr[i-1]) {
swap(arr, i, i-1)
index = i
}
}
left = index
}
}