1、排序的分类可以简单分为以下几种
2、各种排序思路及算法实现
(1) 直接插入排序:我们可以想象一下玩扑克的时候,我们放置扑克牌数的方法: 先取到第一张牌放在第一位置,随后每次取牌放到比它小和比它大的数字之间,如果相等就紧跟其后(不要考虑特殊牌面,毕竟只是举个~),如此循环,直到取完全部牌
思路: 每次将一个待排序的元素,按照其关键码插入到一个有序序列中,初始有序序列可以为待排序元素的第一个值,且当时只有一个值(一定为有序序列)
js实现:
const data = [ 5, 3, 9, 20, 1, 8, 10, 7, 6, 4, 5, 12];
const insertSort = (data) => {
if (data.length <= 1){
return data
}
let temp; //用于存储需要插入的数据
//注意i从1开始,因为以j=i-1为基准数
for(let i = 1; i < data.length; i++){
temp=data[i];
// 因为前i-1个数都是从小到大的有序序列,只要当前比较的数(data[j-1])比temp大,就把这个数后移一位,否则直接在j+1的位置上插入待排序元素
for(var j = i-1; j >= 0 && data[j] > temp; j--){
data[j+1]=data[j];
}
data[j+1]=temp;
}
return data
};
console.log(insertSort(data));
//结果打印值: (12) [1, 3, 4, 5, 5, 6, 7, 8, 9, 10, 12, 20]
(2) 快速排序
思路: 选择数据中的一个值作为中间值(一般取首、中、尾的值),再对数据(此时已经去掉中间值)循环;小于或等于中间值的放在左边、大于或等于中间值的放在右边;再分别对左、右两份数据排序(递归),最终拼接成有序数据
js实现
const data = [ 5, 3, 9, 20, 1, 8, 10, 7, 6,