一篇文章学会常用排序方法
随机初始化数组项
//随机生成20项初始化数组
var arr = [];
for(var i=0; i<20; i++){
arr[i] = Math.floor(Math.random()*21);
}
选择排序
for(var i=0; i<arr.length; i++){
//最小值下标
var minId = i;
for(var j=i+1; j<arr.length; j++){
if(arr[minId] > arr[j]){
//最小值
minId = j;
}
}//内层循环一趟之后 一定可以拿到最小项的下标 minId
//判断最小项下标 和 当前项下标 是否不同 如果不同 就交换, 如果相同,就不换
if(i != minId){
var temp = arr[i];
arr[i] = arr[minId];
arr[minId] = temp;
}
}
/*for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]>arr[j]){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}*/
console.log('选择排序算法');
console.log(arr);
图解:
冒泡排序
for(var i=0; i<arr.length-1; i++){ //n个数排序,只用进行arr.length-1趟
for(var j=0; j<arr.length-1-i; j++){
if(arr[j]>arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log('冒泡排序算法');
console.log(arr);
图解:
插入排序
for(var i=1; i<arr.length; i++){
for(var j=i; j>0; j--){
if(arr[j]<arr[j-1]){
var temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
console.log('插入排序算法');
console.log(arr);
快速排序
function quickSort(arr) {
//5设置排序结束条件
if (arr.length <= 1) {
return arr;
}
//1获得数组的中间下标
var centId = Math.floor(arr.length / 2);
//2获取数组中间项
var cent = arr.splice(centId, 1)[0];
//3中间项作为基准值分割原字符串
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] > cent) {
right.push(arr[i]);
} else {
left.push(arr[i]);
}
}
//4拼接 递归调用自己直到全都排序完成
return quickSort(left).concat(cent, quickSort(right));
}
console.log('快速排序算法');
console.log(quickSort(arr));
图解
测试结构
本文来自博客园,作者:JackieDYH,转载请注明原文链接:https://www.cnblogs.com/JackieDYH/p/17634793.html