(可以不用看我的文章,直接读以下链接,写的很好。我只是做个笔记,唯一的区别是代码实现部分是我用JS写的,不一定完善)
参考链接: https://www.cnblogs.com/onepixel/articles/7674659.html
十种最常见的排序算法大概可以分成两大类
- 比较类排序,通过比较来决定元素之间的相对顺序,由于其时间复杂度不能突破O(nlogn),也成为非线性时间比较类排序
- 非比较类排序:不通过比较来决定元素之间的次序,可以突破比较类排序的时间下界,以线性的时间运行,也称为线性时间非比较类排序、
冒泡排序(Bubble Sort)
重复走访需要排序的数列,一次比较两个元素,如果顺序错误就把这两个交换过来,直到没有需要排序的内容。最小的元素最终会慢慢冒泡浮到顶端。
算法描述
- 从第一个开始比较相邻元素,如果后一个比前一个大,就交换两者顺序。
- 这样最后一个肯定是全场最大的元素了,就不用访问最后一个了
- 重复以上步骤,直到没有需要交换的元素
代码实现:
// 冒泡排序
function bubble(array = []){
if(array.length>1){
let count = 0;
for(let length = array.length-2; length>=0; length--){
count = 0;
for(let i=0; i<=length;i++){
if(array[i]>array[i+1]){
const temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
count++;
}
}
if(count === 0) break;
}
}
return array;
}
选择排序 (Selection Sort)
首先在未排序的序列中找到最小的元素,放在序列的起始位置,然后再重复从剩余的未排序序列中找到最小元素,插入已排序序列的末尾,直到所有元素排序完成。
// 选择排序
function selection(array = []){
if(array.length>1){
for(let i = 0; i<array.length-1;i++){
let minIndex = i;
for(let j = i+1; j<array.length;j++){
if(array[j]<array[minIndex]){
minIndex = j;
}
}
if(minIndex!==i){
const temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
}
}
return array;
}