feat: 添加鸡尾酒排序
This commit is contained in:
parent
f3fe3b0480
commit
167bb9f481
@ -1,10 +1,15 @@
|
|||||||
import {generateRandomArray, measureTime} from "../util/index.mjs"
|
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 arr = generateRandomArray(10000)
|
||||||
const arr2 = generateRandomArray(10000)
|
const arr2 = generateRandomArray(10000)
|
||||||
const arr3 = generateRandomArray(10000)
|
// const arr3 = generateRandomArray(10000)
|
||||||
measureTime(bubbleSort, arr)
|
// measureTime(bubbleSort, arr)
|
||||||
measureTime(bubbleSort2, arr2)
|
// measureTime(bubbleSort2, arr2)
|
||||||
measureTime(bubbleSort3, arr3)
|
// measureTime(bubbleSort3, arr3)
|
||||||
|
|
||||||
|
|
||||||
|
// 鸡尾酒排序测试
|
||||||
|
measureTime(cocktailSort, arr)
|
||||||
|
measureTime(bubbleSort, arr2)
|
@ -46,3 +46,27 @@ export function bubbleSort3(arr) {
|
|||||||
k = swapPos // 把最后一次交换的位置给k,之后的排序支队1 - n-k的元素进行比较,因为之后的元素都是有序的
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user