为什么要写这篇笔记? 因为前不久在做一个项目的时候需要对后端返回的数组数据进行展平处理以适用表格的展示,由于结构复杂加上自身算法能力较弱,竟然用了共四个循环,其中三个嵌套循环,深深地感到我还是要好好学习下算法方面的知识的,况且我也早有这个计划,只是不曾付诸实践。。 于是这次就索性以排序开刀。
十种排序算法的整体概括
分类" title="分类">
var a = [5,7,8,6,1,2,5,4,9];
冒泡排序
冒泡排序的过程为:第一趟:从第一个元素开始,比较他和之后的元素,如果比之后的元素大,那么就换位置,这一趟下来,最大的元素就位于最后了,再进行第二趟,将第二大元素放在倒数第二,最终完成排序
// me 初级
function popSort(arr) {
if (!arr.length) {
return;
}
var l = arr.length;
for (var i = l; i>0;i--) {
console.log('第',i,'次处理数组:',arr);
for (var j=0;jarr[j+1]) {
console.log(['arr[',j,']比后面的元素大'].join(''));
var temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
console.log(arr);
}
}
console.log(arr);
}
}
// popSort(a);
function bubbleSort(array) {
let low = 0;
let high = array.length - 1;
while (low < high) {
for (let j = low; j < high; j++) {
if (array[j] > array[j + 1]) {
const temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
--high;
console.log(low,high)
}
return array;
}
// bubbleSort(a);
选择排序
思路:第一次,比较所有元素,选出最小的,和第一个元素换位置,则最小的就位于第一位了,再进行第二次相同操作,可将第二小元素置于第二的位置...最终实现排序。
// me
function selectSort(arr) {
var l = arr.length;
for (var i=0;i
插入排序
// me
function insertSort(arr) {
var flag = 1;
var l = arr.length;
if (arr[0] > arr[1]) {
var temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
console.log(arr);
}
while (flag<l-1) {
console.log(flag);
for (var i=flag-1;i>0;i--) {
if (arr[i-1]<=arr[flag]&&arr[flag]<arr[i]) {
arr.splice(i,arr[flag]);
arr.splice(flag+1,1);
console.log(arr);
} else if (arr[flag]<arr[0]) {
arr.unshift(arr[flag]);
arr.splice(flag+1,1);
console.log(arr);
}
}
flag++;
}
}
insertSort(a);
// not mine
function insertionSort(array) {
for (let i = 1; i < array.length; i++) {
let key = array[i];
let j = i - 1;
while (j >= 0 && array[j] > key) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = key;
}
return array;
}