排序算法
更新时间:2023-04-10 18:51:13标签:算法web前端
1type SortRule = 'descend' | 'ascend';23// 冒泡排序(默认升序)4export function bubbleSort(list: number[], rule: SortRule = 'ascend') {5 let i = list.length - 1;6 while (i > 0) {7 let position = 0; // 记录最后一次发生交换的位置,大于position的部分说明无需排序8 for (let j = 0; j < i; j += 1) {9 const condition = rule === 'ascend' ? (list[j] > list[j + 1]) : (list[j] < list[j + 1]);10 if (condition) {11 position = j;12 const temp = list[j];13 list[j] = list[j + 1];14 list[j + 1] = temp;15 }16 }17 i = position;18 }19 return list;20}2122// 选择排序23export function selectionSort(list: number[], rule: SortRule = 'ascend') {24 let i = list.length - 1;25 while (i > 0) {26 let index = i;27 let target = list[i];28 for (let j = 0; j < i; j += 1) {29 if (rule === 'ascend' ? (list[j] > target) : (list[j] < target)) {30 index = j;31 target = list[j];32 }33 }34 // 每次循环都把最大/最小的值放到末尾35 list[index] = list[i];36 list[i] = target;37 i -= 1;38 }39 return list;40}4142// 插入排序43export function insertionSort(list: number[], rule: SortRule = 'ascend') {44 for (let i = 0; i < list.length; i += 1) {45 const value = list[i];46 let j = i - 1;47 for (; j > -1 && (rule === 'ascend' ? (list[j] > value) : (list[j] < value)); j -= 1) {48 // 把 index < i 中大于/小于value的元素向前移一位49 list[j + 1] = list[j];50 }51 // 插入value52 list[j + 1] = value;53 }54 return list;55}
原数据
[1,2,50,42,32,36,39,69,89,46]
正序
- 冒泡[1,2,32,36,39,42,46,50,69,89]
- 选择[1,2,32,36,39,42,46,50,69,89]
- 插入[1,2,32,36,39,42,46,50,69,89]
倒序
- 冒泡[89,69,50,46,42,39,36,32,2,1]
- 选择[89,69,50,46,42,39,36,32,2,1]
- 插入[89,69,50,46,42,39,36,32,2,1]