此处代码表示将数组里的两项元素进行置换
 function swap(arr, i, j) {  let temp = arr[j]  arr[i] = arr[j]  arr[j] = temp}
       复制代码
 冒泡排序
1.概念
比较相邻两元素。如果前一个比后一个大,则互换
对每一对相邻元素做同样的操作,从开始第一对到结尾的最后一对。这一步做完后,最后的元素会是最大的值。
针对所有元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
对于 n 个数的排序,需要经过 n-1 趟的比较
2.最快的时候
当输入的数据已经是正序时(已经是正序了)
3.最慢的时候
当输入的数据是反序时(可以写一个反输出的循环, 估不需要冒泡)
4.代码
 function bubbleSort(arr) {  let len = arr.length - 1  for (let i = 0; i < len; i++) {    for (let j = 0; j < len - i; j++) {      if (arr[j] > arr[j + 1]) {        swap(arr, j, j + 1)      }    }  }}
       复制代码
 冒泡排序改良版:
如果在一趟排序中,1 次交换都没有进行,则数据已经有序了,结束排序
改进思想: 只需要在原来的基础上,增加一个标志变量,判断某一趟排序是否有交换进行
 function bubbleSort(arr) {  // 如果数组为空 或者 数组只有一个元素, 则无需排队  if (arr == null || arr.length < 2) return  const len = arr.length - 1  for (let i = 0; i < len; i++) {    let flag = false  // 是否有交换    for (let j = 0; j < len - i; j++) {      if (arr[j] > arr[j + 1]) {        flag = true // 经过了交换        swap(arr, j, j + 1)      }    }    if (!flag) return    // 如果一趟排序中,1次交换都没有,则数据已经有序,结束排序  }}
       复制代码
 
选择排序
1.概念
首先在未排序序列中找到最小(最大)的元素,存放在排序序列的起始位置
再从剩余未排序元素中继续寻找最小(最大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完成
选择排序是不稳定的算法
2.代码
 function selectionSort(arr) {	let minIndex = 0  let len = arr.length  for (let i = 0; i < len - 1; i++) {  	minIndex = i    for (let j = 0; j < len; j++) {    	if (arr[minIndex] > arr[j]) {      	minIndex = j      }    }    swap(arr, i, minIndex)  }  return arr}
       复制代码
 插入排序
评论