这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战
冒泡排序和插入排序都是比较经典的排序方式,这里针对自己的理解做了图文和代码注释加以说明。加深自己的学习印象。
冒泡、插入,选择只是基础排序,时间复杂度O(n2),这种排序不会在实际过程中使用,我们要了解的是他的思想
冒泡排序:
\
function bubbleSort(arr){
let sorted = false;
while(!sorted){ // arr[i] 没有比arr[i+1]大的情况 就结束了
sorted = true
for(let i=0; i < arr.length; i++){
if(arr[i] > arr[i+1]){ // 进行两两对比
[arr[i],arr[i+1]] = [arr[i+1],arr[i]]
sorted = false //交换完成 置为false
}
}
}
return arr
}
插入排序 (扑克排序)
插入排序的思想是选择一个起始作为参考元素, 将
参考元素在和左侧做一一比较,如果被比较的元素大则右移, 否侧比较结束,将参考元素放到停止比较的位置, 重复上述操作,完成排序.
function insertionSort(arr){
let len = arr.length;
let temp ,pos // pos记录最终停止比较的位置
for(let i = 0; i < len ; i ++){
let temp = arr[i]
pos = i // 参考元素索引
while(pos > 0 && arr[pos-1] > temp){
arr[pos] = arr[pos -1]
pos --
}
arr[pos] = temp // 将temp放到停止比较的位置
}
return arr
}
insertionSort([5,4,3,2,1])
选择排序
顾名思义,选择排序是选择一个元素,假设他最小然后 和 其他元素进行比较,标记最小索引位置, 完成内侧循环后,将最小位置和当初选择的元素进行位置交换, 直到最后一个元素,则完成排序.
function selectionSort(arr){
let min; // 这个变量记录最小值对应的索引
for(let i = 0; i < arr.length; i++ ){
min = i // 将min 之后的元素和min 一一比较 所以 j的初始值是 i
for(let j = i + min; j < arr.length; j++){
if(arr[min] > arr[j]){
min = j // 此时对应的最小索引位是j 记录下来
}
}
// 进行一轮循环之后 最小索引位的值和 比对元素 做位置交换
[arr[min], arr[i]] = [arr[i], arr[min]]
}
return arr
}