1

一. 选择排序

1.基本思想

找到数组最小的元素,将它和数组红第一个元素交换位置,接下来,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置,往复如此,直到将整个数组排序。基本点就是不断地选择剩余元素之中的最小者。

2.特点

  1. 运行时间和输入无关。
    对于长度为N的数组,选择排序需要大约N2/2次比较和N次交换

  2. 数据移动是最少的
    交换次数和数组的大小是线性关系。

使用javascript实现的效果

function select(array){
    var len=array.length;
    for(var i=0;i<len-1;i++){  //这里之所以是len-1,是因为到最后两个元素,交换位置,整个数组就已经排好序了。
        var minnum=array[i];
        for(var j=i+1;j<len;j++){ // j=i+1是把与自己比较的情况给省略掉
            if(array[j]<minnum){
              var c;
              c=minnum;
              minnum=array[j];    //交换两个值
              array[j]=c;
            }
        }
        array[i]=minnum;      
    }
    return array;

}

二、插入排序

1.基本思想

将一个元素插入到其它已经有序的牌中的适当位置,因此其他所有元素在插入之前都向右移动一位,为新元素腾出空间。

2.特点

插入排序所需的时间取决于输入中元素的初始顺序,一个有序的序列比随机顺序的序列花费的时间更少。
对于随进排列的长度为N且主键不重复的数组,最坏情况下需要输入N2/2

function insert(array) {
        for (var i = 1; i < array.length; i++) {
            var key = array[i];
            var j = i - 1;
            while (j >= 0 && array[j] > key) {
                array[j + 1] = array[j];
                j--;
            }
            array[j + 1] = key;
        }
        return array;
}

hopeCoder
560 声望47 粉丝

不忘初心,方得始终


« 上一篇
Pug模板(一)
下一篇 »
margin详解