思想:javascript
var arr = [29, 10, 34, 40, 18];
function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++){
for (var j = 0; j < arr.length - 1 - i; j++){
var num = arr[j];
if(arr[j] > arr[j + 1]){
arr[j] = arr[j + 1];
arr[j + 1] = num;
}
}
}
return arr;
}
bubbleSort(arr) // [10, 18, 29, 34, 40]
复制代码
思想:java
function insertC(A) {
for (let i = 1; i < A.length; i++) {
// p 指向 下一个要比较的索引
let p = i - 1
// 当前要插入项
let cur = A[i]
// 只要前一项大于当前项就一直循环下去
while(p >= 0 && A[p] > cur) {
// 前一项大于当前项 就将前一项日后挪一位
A[p + 1] = A[p]
// 每比较完一次 p存储的索引值 就往前挪一位 进行下次比较
p--
}
// 执行到这一行 说明 当前项cur 大于索引p这一项
// 则将当前项插入到后面
A[p + 1] = cur
}
}
const A5 = [2, 4, 13, 6, 3]
insertC(A5)
console.log(A5) // [ 2, 3, 4, 6, 13 ]
复制代码
思想:数组
var arr = [29, 10, 34, 40, 18];
function qu(ary) {
if (ary.length <= 1) return ary;
var centIndex = Math.floor(ary.length / 2);
var left = [];
var right = [];
var centNum = ary.splice(centIndex, 1)[0];
for(var i = 0; i< ary.length; i++){
if(ary[i] < centNum) {
left.push(ary[i]);
}else {
right.push(ary[i]);
}
}
return qu(left).concat(centNum, qu(right));
}
console.log(qu(arr));// [10, 18, 29, 34, 40]
复制代码
思想:ui
var arr = [3, 2, 4, 7, 1, 5, 9, 6, 8];
var min;
for (var i = 0; i < arr.length - 2; ++i) {
var temp = arr[i];
min = i;
for (var j = i + 1; j < arr.length - 1; ++j) {
if (arr[j] < arr[min]) {
min = j
}
}
arr[i] = arr[min];
arr[min] = temp;
}
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码
希尔排序: 他是首先比较最远的元素而非相邻的元素,让元素尽快回到正确的位置经过定义一个间隔序列来表示在排序过程当中进行比较的元素间隔。公开的间隔序列为 701, 301, 132, 57, 23, 10, 4, 1spa
var arr = [3, 2, 4, 7, 1, 5, 9, 6, 8];
var gops = [5, 3, 1];
for(var g=0; g<gops.length;g++) {
for(var i=gops[g]; i<arr.length; i++){
var temp=arr[i];
for(var j=i; j>=gops[g] && arr[j-gops[g]]>temp;j-=gops[g]){
arr[j] = arr[j-gops[g]];
}
arr[j] = temp
}
}
console.log(arr) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
复制代码