#步骤拆解:
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,
- 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾(每趟遍历起始位置向后偏移一位)。以此类推,直到所有元素均排序完毕。
- 使用与数据规模较小的数组。
简单实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function selectionSort(arr) { var length = arr.length; var minindex, temp; console.time('选择排序耗时'); for (var i = 0; i < length; i++) { minindex = i; for (var j = i + 1; j < length; j++) {//从未排序的子数组中找到最小数值的角标 if (arr[j] < arr[minindex]) { minindex = j; } } temp= arr[minindex];//将最小数与 arr[minindex] = arr[i]; arr[i] = temp; } console.timeEnd('选择排序耗时'); return arr; }
|
#小结:
归并排序时间复杂度为O(nlogn),空间复杂度为O(n),不稳定
图解: