版权声明:本文为博主原创文章,未经博主允许不得转载。
javascript 选择排序、插入排序
选择排序
选择排序的基本思想:选择排序是一种相对来说比较简单的排序算法,基本思路是从数组的第一个元素开始,比较第一个元素的和其他元素的大小,然后把最小的一个元素和第一个元素交换,然后再进行的第二次排序,从第二个元素开始,比较第二个元素和其他元素的大小,再把第二个元素,和之后的元素进行比较,同理把最小的一个元素放在第二个元素的位置,以此类推,一直到数组的倒数第二个元素,到此为止,排序完毕,下面是引用的一张百度的图片,个将选择排序表达的比较清楚。
附上具体的代码实现(javascript数据结构与算法):
/**
** 数据元素交换
**/
function swap(arr, t1, t2){
let temp = arr[t1];
arr[t1] = arr[t2];
arr[t2] = temp;
}
function selectSort(arr) {
var minIndex;
for(var i=0;i<arr.length;i++){
minIndex = i;
for(var j=i+1;j<arr.length; j++) {
if(arr[j] < arr[i]){
minIndex = j;
}
swap(arr, i, minIndex);
}
}
}
时间复杂度
O(n^2)
插入排序
插入排序基本思想: 通俗一点,比如在我们在斗地主的时候,开始摸到的牌都是乱的,然后我们按照一定的顺序整理扑克牌,就是根据牌的大小插入到合适的位置,下面引用一个图片,用来说明插入排序的算法:
图片详解:
(1) 首先对于第一个元素53,我们保持不动;
(2)下面我们看27这个元素,我们要做的是把27这个元素和前面的元素比较,27<53,所以27和53交换位置;
(3)36和前面的元素比较: 36<53,所以36和53交换位置,再将36和和前面的元素比较,36>23 所以36就应该插入再27和53之间;
以此类推,直到最后一个元素插入到合适的位置,该数组排序完毕;
代码实现:
function insertionSort(arr) {
var temp, inner;
for (var outer = 1; outer <= arr.length - 1; ++outer) {
temp = arr[outer];
inner = outer;
while (inner > 0 && (arr[inner - 1] >= temp)) {
arr[inner] = arr[inner - 1];
--inner;
}
arr[inner] = temp;
}
}
时间复杂度
- 最坏的情况下: 数组完全逆序[5,4,3,2,1] 这种情况下时间复杂度为O(n^2);
- 最好的情况下: 数组是按顺序排列的[1,2,3,4,5],这种情况下的时间复杂度为O(n)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。