博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法学习(二):O(n^2)排序算法
阅读量:5908 次
发布时间:2019-06-19

本文共 1302 字,大约阅读时间需要 4 分钟。

总结一下学习的复杂度为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)希尔排序最关键是理解它是步长衰减的插入排序。

 

转载于:https://www.cnblogs.com/ling-diary/p/9300961.html

你可能感兴趣的文章
JavaScript全局作用域下,变量加var和不加var的区别。
查看>>
Python 3 新特性:类型注解
查看>>
零基础学习 Python 之细说类属性 & 实例
查看>>
JavaScript设计模式与开发实践笔记
查看>>
日常工作中关于前后端分离的简单介绍
查看>>
wx小程序(3) - 自定义组件及参数传输
查看>>
Redux-Middleware-源码解析
查看>>
cmake常用命令
查看>>
如何监听URL的变化?
查看>>
网络基础总结
查看>>
数据请求+
查看>>
APNs推送那些事
查看>>
iOS10 Xcode 8 中provisioning file 相关bug
查看>>
在Xcode项目中运行Python文件
查看>>
DOM事件全面总结
查看>>
Traefik 入手及简单配置
查看>>
激光SLAM导航技术日益成熟 推动机器人进入发展新时代
查看>>
Conflux吐槽君:IOTA物联网电磁炉-让PoW的耗电没有遗憾
查看>>
265. To B 端 Web 页面上线前 checklist
查看>>
你可能不清楚的 Vue Router 深度用法(一)
查看>>