说到排序,这可能是个令很多读者头疼的“洪水猛兽”。在这篇文章中,笔者会用js代码简单实现几个经典的排序算法。会在以后看心情慢慢更新😜。
冒泡排序
冒泡排序(Bubble Sort),sometimes referred to as sinking sort, is a simple sorting algorithm that repeatedly steps through the list, compares adjacent pairs and swaps them if they are in the wrong order. ——《维基百科》
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。——《百度百科》
冒泡排序重复遍历,,比较相邻两个元素,如果发现次序出错,就把相邻元素交换位置,就像碳酸饮料中上浮的一个个气泡一样,所以被命名为“冒泡排序”。 代码如下:
function f(arr) { //冒泡排序函数
var len = arr.length;
for (var i = 0; i < len; i++) {
for (var j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
var temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
let arr=[9,8,7,6,5,4,3,2,1];
console.log(f(arr));
运行结果
选择排序
选择排序(Selection sort),第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。——《百度百科》
图片来源:By Joestape89, CC BY-SA 3.0, commons.wikimedia.org/w/index.php…
function f(arr) {
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
let arr=[9,8,7,6,5,4,3,2,1];
console.log(f(arr));
运行结果
插入排序
插入排序(Insertion sort),Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there. It repeats until no input elements remain.——《维基百科》
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。——《百度百科》
图片来源:By Swfung8 - Own work, CC BY-SA 3.0, commons.wikimedia.org/w/index.php…
插入排序的过程和打扑克牌时摸牌后将牌按顺序放入手牌的操作很相似。
function f(arr){
var len=arr.length;
var preIndex,current;
for(var i=1;i<len;i++){
preIndex=i-1;
current=arr[i];
while(preIndex>=0 && arr[preIndex]>current){
arr[preIndex+1]=arr[preIndex];
preIndex--;
}
arr[preIndex+1]=current;
}
return arr;
}
console.log(f([7,5,3,6,9,4,2,0,1]))
运行结果: