学习算法和数据结构最开始一般都是排序算法。想象一下如果一本字典是无序的,我们要查一个词得花多少时间,幸好市面上的字典的内容都是按照一定顺序排列好的。
进入正题,先学习一下最容易理解的3个算法。
1、选择排序
选择排序的思路是,每次从待排数组中pick出最小的(问题规模每次减一)
function selectSort(a) {
let arr = JSON.parse(JSON.stringify(a));
let len = arr.length;
for(let i=0;i< len; i++) {
for(let j = i + 1; j< len; j++) {
log(arr[i]);
if (arr[i] > arr[j]) {
[arr[i], arr[j]] = [arr[j], arr[i]];
}
}
}
return arr;
}
2、冒泡排序
// 冒泡排序的思路是:每次比较相邻的两个,这样每第n轮,倒数第n个就是排列好的
function bubbleSort(a) {
let arr = JSON.parse(JSON.stringify(a));
let len = arr.length;
for (let i = 0; i < len; i++) {
// 减一是因为每次和后一个比较, -i 是因为第i轮结束时已经排好了最后面的i个
for(j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
3、插入排序
// 插入排序的思路是: 从待排数组中取出一个i,放到已排好的新数组里正确的位置
function resertSort(a) {
let arr = JSON.parse(JSON.stringify(a));
let len = arr.length;
let res = [arr[0]];
for (let i = 1; i < len; i++) {
// 减一是因为每次和后一个比较, -i 是因为第i轮结束时已经排好了最后面的i个
let cur = res.length;
for (let j = 0; j < res.length; j++) {
if(arr[i] < res[j]) {
cur = j;
break;
}
}
res = res.slice(0, cur).concat(arr[i], res.slice(cur));
}
return res;
}
以上三种是最基础最好理解的3种排序算法都是O(n2)O(n^{2})O(n2)后面我们再研究下更快的排序算法,未完待续
本文介绍了排序算法的基础知识,包括选择排序、冒泡排序和插入排序的原理及实现代码。这三种算法虽然时间复杂度相同为O(n^2),但思路各有特点,是理解排序算法的良好起点。选择排序通过每次挑选最小元素来逐步排序;冒泡排序通过相邻元素比较交换实现排序;插入排序则是将元素插入到已排序部分的合适位置。
198

被折叠的 条评论
为什么被折叠?



