1.冒泡排序
每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。
而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。
function bubbleSort(arr) { for (var i = 1; i < arr.length; i++) { for (var j = 0; j < arr.length - i; j++) { if (arr[j] > arr[j + 1]) { var num = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = num; } } } return arr; }
时间复杂度:O(n^2)
2.选择排序
工作原理是:第一次从待排序的中数据元素选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。首先在未排序的序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
function selectionSort(arr) { for (var i = 0; i < arr.length - 1; i++) { var min = i; for (var j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) min = j; } if (min != i) { var num = arr[i]; arr[i] = arr[min]; arr[min] = num; } } return arr; }
时间复杂度:O(n^2)
3.快速排序
(1)选出一个mid,一般是最左边或是最右边的。
(2)定义一个left[]和一个right[],遍历数组,在走的过程中,若遇到大于mid的数,则存入right中,否则存入right中
(4)此时mid的左边都是小于mid的数,mid的右边都是大于mid的数
(5)将mid的左序列和右序列再次进行这种单趟排序,如此反复操作下去,直到左右序列只有一个数据,或是左右序列不存在时,便停止操作,此时此部分已有序
function quickSort(arr) { if (arr.length <= 1) { return arr; } else { var left = [], right = [], mid = arr[0]; for (var i = 1; i < arr.length; i++) { arr[i] > mid ? right.push(arr[i]) : left.push(arr[i]); } return quickSort(left).concat([mid], quickSort(right)); } } console.log(quickSort(arr));
时间复杂度:O(nLogn)
标签:arr,min,mid,冒泡排序,序列,var,排序,快速 From: https://www.cnblogs.com/luochenhuan/p/16769851.html