1.时间复杂度
- n*n:冒泡排序、选择排序、插入排序
- nlogn:快速排序、归并排序、堆排序
2.冒泡排序
- 定义:每次都是相邻元素比较,第一个元素比第二个元素大则交换位置直到最后一个元素为最大,继续循环
- 代码实现:
function bubbleSort(arr) {var len = arr.length;for (var i = 0; i < len - 1; i++) {for (var j = 0; j < len - 1 - i; j++) {if (arr[j] > arr[j+1]) { var temp = arr[j+1]; arr[j+1] = arr[j];arr[j] = temp;}}}return arr;
}
3.选择排序
- 定义:遍历未排序数组找出最小元素放到未排序数组的起始位置
- 代码实现:
function selectionSort(arr) {var len = arr.length;var minIndex, temp;for (var i = 0; i < len - 1; i++) {minIndex = i;for (var j = i + 1; j < len; j++) {if (arr[j] < arr[minIndex]) { minIndex = j; }}temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}return arr;
4.插入排序
- 定义:遍历未排序数组,将未排序元素与排序数组逐个比较,插入到对应位置
- 代码实现:
function insertionSort(arr) {var len = arr.length;var preIndex, current;for (var i = 1; i < len; i++) {preIndex = i - 1;current = arr[i];while (preIndex >= 0 && arr[preIndex] > current) {arr[preIndex + 1] = arr[preIndex]; preIndex--; }arr[preIndex + 1] = current;}return arr;
}
5.归并排序
- 定义:利用递归的思想,数组不断拆分成小数组,小数组内部排序完成返回有序数组,根据返回结果递归形成完整有序数组
- 代码实现:
function mergeSort(arr) {var len = arr.length;if (len < 2) {return arr;}var middle = Math.floor(len / 2),left = arr.slice(0, middle),right = arr.slice(middle);return merge(mergeSort(left), mergeSort(right));
}function merge(left, right) {var result = [];while (left.length>0 && right.length>0) {if (left[0] <= right[0]) {result.push(left.shift());} else {result.push(right.shift());}}while (left.length)result.push(left.shift());while (right.length)result.push(right.shift());return result;
}
6.快速排序
- 定义:
- 将第一个元素作为基准值,遍历数组,比基准小的放在左边,最后将第一个元素与最后一个左边元素调换位置
- 以此类推,在左边以及右边的数组中重复该操作直至全部数组排序完成
- 代码实现:
function quickSort(arr, left, right) {var len = arr.length,partitionIndex,left = typeof left != 'number' ? 0 : left,right = typeof right != 'number' ? len - 1 : right;if (left < right) {partitionIndex = partition(arr, left, right);quickSort(arr, left, partitionIndex-1);quickSort(arr, partitionIndex+1, right);}return arr;
}function partition(arr, left ,right) { var pivot = left, index = pivot + 1;for (var i = index; i <= right; i++) {if (arr[i] < arr[pivot]) {swap(arr, i, index);index++;} }swap(arr, pivot, index - 1);return index-1;
}function swap(arr, i, j) {var temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}