js:js实现几种排序算法(待补)

js实现几种排序算法(待补)

嵌套for循环:外层每一次执行,内层都需全部执行

1.冒泡排序

比较相邻的元素。如果第一个比第二个大,就交换他们两个

function testArr(arr){
	for (var i = 0; i <= arr.length-1; i++) {
		for (var j = 0; j <= arr.length-1-i; j++) {
		    if(arr[j]>arr[j+1]){
		    	[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
		    }
	    }
	}
	return arr;
}
var arr = testArr([2,1,6,3,7,4,8,5]);
console.log(arr);
i=0,排序出数组最后一位为最大的数
i=1,排序出数组倒二位,内循环最后一位不再计入循环(j<arr.length-1-i)
2.插入排序

第一个元素默认是已排序元素,取出下一个元素和当前元素比较,如果当前元素大就把下一个元素插入当前元素之前

function insertSort(arr){
  let brand = [];
  //第一个默认排序
  brand.push(arr[0]);
  for(let i=1;i<arr.length;i++){
    //数组后面未排序的变量
    let A = arr[i];
    for(let j=brand.length-1;j>=0;j--){
      //要执行所有的j
      let B = brand[j];
      //如果 arr[i]>B,则把A插入到数组中B的后面,数组长度加一位
      if(A>B){
        brand.splice(j+1,0,A);
        break;
      }
      //如果 A(为arr[i])<B(为arr[0]),把arr[i]放到数组最前面,此时brand[0]为最小值
      if(j===0){// if(A<brand[0])
        brand.unshift(A);
      }
    }
  }
  return brand;
}

var arr = insertSort([5,2,1,6,3,7,4,8,9]);
console.log(arr);
初始B为5
5>arr[1]=2则执行if(j===0)则brand为[2,5]  
2>arr[2]=1则执行if(j===0)则brand为[1,2,5]
brand[j]<arr[3]=6则执行if(A>B)则brand为[1,2,5,6]
依次类推,数组不一样执行方式也不一样
3.选择排序

首先从数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,直到排序完毕

function selectionSort(arr) {
    var len = arr.length,min,temp;
    for (var i = 0; i < len - 1; ++i) {
        min = i;//最初默认的最小值下标
        for (var j = i + 1; j < len; ++j) {
            if (arr[j] < arr[min]) {
                min = j;//最小值改变时下标更新
            }
        }
        temp = arr[min];
        arr[min] = arr[i];
        arr[i] = temp;
    }
    return arr;
}
var arr = selectionSort([5,2,1,6,3,7,4,8,9]);
console.log(arr);
i=0,arr[min]=3循环后面的所有元素,如果哪个小就记录最小下标,直到循环所有的元素的最小值下标
     然后本次的最小值与最初的arr[min]交换。下面步骤同理
i=1,
.
.
.

猜你喜欢

转载自blog.csdn.net/m0_49888984/article/details/108462955
今日推荐