/** 生成数组 */
function generateArr(sizi = 100000){
var set = new Set();
while(true){
let item = parseInt(Math.random() * 100000000000);
if( item % 2 == 1 ){
set.add( parseInt(item / 3) )
}else if( item % 5 == 0 ){
set.add( parseInt(item / 4) )
}else{
set.add( parseInt(item / parseInt(Math.random() * 10) ) )
}
if(set.size == sizi){
break;
}
}
return [ ...set ];
}
// 冒泡排序 (相邻两个数比较,如果前面的数小于后面的数则互换位置)
function a(arr){
var k = 0;
for(var i = 0;i<arr.length-1;i++){
for(var j=0;j<arr.length-1;j++){
if(arr[j]<arr[j+1]){
var t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
k++;
}
}
}
console.log("k:",k);
}
// 选择排序 (选择一个数和后面的数比较,如果选择的数小于后面的数,则互换位置)
function b(arr){
var l=0;
for(var i=0;i<arr.length - 1;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
var t=arr[i];
arr[i]=arr[j];
arr[j]=t;
l++;
}
}
}
console.log("l:",l);
}
// 插入排序 (取两个值互相比较,如果后值大于前值,记录后值,并把前值赋值给后值,然后去做循环,判断条件是脚标大于等于0并且记录的值小于数组脚标的值,就把后面的值赋值给前面的值,然后角标-1,直到不满足条件时,数组角标+1 是记录的值)
function c(arr){
for (var i = 1; i < arr.length; i++) {
if(arr[i] < arr[i-1]){
var t = arr[i];
var j = i - 1;
arr[i] = arr[j];
while (j >= 0 && t < arr[j]) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = t;
}
}
}
// 快速排序 (取中间值,分成两边,如果小于中间值,放左边数组,如果大于中间值放右边数组,然后不断的重复该方法直到数组的长度小于等于1时 )
function d(elements){
if(elements.length <= 1){
return elements;
}
var pivotIndex = Math.floor(elements.length / 2);
var pivot = elements.splice(pivotIndex,1)[0];
var left = [];
var right = [];
for (let i = 0; i < elements.length; i++) {
if( elements[i] < pivot ){
left.push(elements[i]);
}else{
right.push(elements[i]);
}
}
return d(left).concat([pivot],d(right));
}
console.time("t");
let result = d(generateArr());
console.timeEnd("t")
js 冒泡、选择、插入、快速排序
最新推荐文章于 2020-07-11 17:50:23 发布