zoukankan      html  css  js  c++  java
  • 算法学习(二):O(n^2)排序算法

    总结一下学习的复杂度为O(n^2)的三种排序算法:选择排序,插入排序,希尔排序。

    (1)选择排序:从第一个位置开始每次查找剩下的位置中最小的数值放入当前位置;

    (2)插入排序:从第二个位置开始,每次都将当前位置的数值插入前面合适的位置,对于几乎有序的数列来说,插入排序能带来更高的效率;

    (3)希尔排序:变步长区间的插入排序,指定一个步长衰减率,每一轮插入排序都将间隔指定步长的数值排序完成,当步长衰减为1时,就成了标准的插入排序。

    代码实现:

    (1)选择排序

    var selectSort = function(arr,len){
        var i,j,min;
        for(i = 0; i < len; ++i){
            min = i;
            for(j = i + 1; j < len; ++j){
                if(arr[min] > arr[j]){
                    min = j;
                }
            }
            swap(arr,i,min);
        }
    };

    (2)插入排序

    var insertSort = function(arr,len){
        var i,j,k;
        for(i = 1; i < len; ++i){
            k = i;
            for(j = i-1; j >= 0; --j){
                if(arr[j] > arr[k]){
                    swap(arr,k,j);
                    k--;
                }else{
                    break;
                }
            }
        }
    };

    (3)希尔排序

    var shellSort = function(arr,len,stepInterval){
        var step,i,j,k;
        for(step = Math.floor(len / stepInterval); step > 0; step = Math.floor(step/stepInterval)){
            for(i = step; i < len; ++i){
                k = i;
                for(j = i - step; j >= 0 && arr[j] > arr[k]; j -= step){
                    swap(arr,k,j);
                    k = j;
                }
            }
        }
    }

    总结:

    (1)可以从整理扑克牌的不同方式来帮助理解,选择排序就是每次都从剩下的牌里取最小的牌放到手里最后的位置;插入排序就是每次都将剩下的牌里任取的一张插入手中牌里合适的位置;

    (2)希尔排序最关键是理解它是步长衰减的插入排序。

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/ling-diary/p/9300961.html
Copyright © 2011-2022 走看看