写点什么

十大算法

用户头像
wudaxue
关注
发布于: 1 小时前

此处代码表示将数组里的两项元素进行置换

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}
复制代码

插入排序


用户头像

wudaxue

关注

wudaxue 2020.11.26 加入

简简单单 干干净净 明明白白

评论

发布
暂无评论
十大算法