1. 冒泡排序:从左到右依次进行对比,大的在右边
function maopao (data) {
const len = data.length;
for (let i = 0; i < len; i++) {
for (let j = 1; j < len-i; j++) {
if (data[j]<data[j-1]) {
[data[j-1],data[j]]=[data[j],data[j-1]]
}
}
}
return data;
}
2. 选择排序:选择最小值交换
function xuanze (data) {
const len=data.length
for (let i = 0; i < len-1; i++) {
let minIndex = i;
for (let j = i+1; j < len; j++) {
if (data[j]<data[minIndex]) {
minIndex = j;
}
}
if (minIndex !== i) {
[data[i], data[minIndex]] = [data[minIndex], data[i]]
}
}
return data;
}
3. 插入排序:假设有序,然后对比
const len = data.length;
for (let i = 1; i < len; i++) {
let k = i;
for (let j = i - 1; j > -1; j--) {
if (data[j] > data[i]) {
k = j;
}
}
[data[k],data[i]]=[data[i],data[k]]
}
return data;
}
4. 快速排序:二分法排序
function kuaisu (data) {
const len = data.length;
if (len === 0) return [];
let tmp = data[0],lesser=[],greater=[];
for (let i = 1; i < len; i++) {
if (data[i] < tmp) {
lesser.push(data[i]);
} else {
greater.push(data[i]);
}
}
return kuaisu(lesser).concat(tmp, kuaisu(greater));
}
5. 希尔排序:插入排序的基础上,间隔监测
function xier (data) {
let len = data.length;
// gap 即为增量
for (let gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
for (let i = gap; i < len; i++) {
let j = i;
let current = data[i];
while(j - gap >= 0 && current < data[j - gap]) {
data[j] = data[j - gap];
j = j - gap;
}
data[j] = current;
console.log(gap,data);
}
}
}
// [11, 2, 18, 44][1, 3, 5]
// // 11, 44, 5 2, 1 18, 3
// [5, 1, 3, 11, 2, 18, 44]
// 归并排序:(待补充)
const data = [11, 2, 18, 44, 1, 3, 5,9];
console.log(charu(data));