3

1.前言

从上大学开始,算法与数据结构这东西我是一直心心念念,奈何又懒又蠢,这么基础科目一直没啥成效。但是如鲠在喉,如果再不学的话可能就成为一块心病了。所以虽然和现在工作没啥关系但还是决定学一下基础,聊以自慰。

2.排序

2.1简单选择排序

对于一个有n个元素的数组a(下标从0开始),进行n趟操作,每趟从待排部分[i,n)中i选择i最小的元素,令其与a[i]进行交互,总复杂度为O(n^2):

    var a = [5, 2, 4, 6, 3, 1];
    //select sort
    function selectSort(a) {
        var n = a.length;
        for (var i = 0; i < n; i++) {//n次操作,即所谓的趟
            var k = i;//设最小值的下标为i
            console.log(i)
            for (var j = i + 1; j < n; j++) {//每趟待排序部分
                if (a[j] < a[k]) {//若求倒序则改为>
                    k = j;//更新最小值的下标
                }
            }
            //交换
            var temp = a[i];
            a[i] = a[k];
            a[k] = temp;
        }
        return a;
    }
    console.log(selectSort(a));

2.2简单插入排序

这里的插入排序指的是直接插入排序。插入排序的过程就是将待插元素一个个插入初始有序部分的过程。而直接插入排序就是把未排序的序列里的第一位数与前面的有序数列进行比较,凡是比它大的都向后移动一位,直到找到正确的位置进行交换。

function insertSort(a){
        var n=a.length;
        for(var i =1;i<n;i++){//从序列第二个值开始,比较n-1趟
            var temp = a[i];//保存要进行排序的值
            var j=i;
            while(j>0&&temp<a[j-1]){//和前一个值进行比较
                a[j]=a[j-1];//若小于前一个值,则将前一个值向后移动一个位置
                j--;//这时前一个值的位置空出来了,下次交换则在前一个值的位置上进行
            }
           a[j]=temp;//将缓存的进行排序的值放到正确的位置

        }
        return a;
    }
    console.dir(insertSort(a));

其实很像倒着来的冒泡排序

参考书目

《算法笔记》


梦中的贝壳
41 声望6 粉丝