排序算法
title: 排序算法 date: 2019-12-05 15:26:08
tags:
算法和数据结构是相互依存的.
前端的数据结构主要用数组和对象.js 没有指针,无法使用链表.
排序算法
冒泡排序(体育委员两两对比)
时间复杂度:O(n)
需求: 数组 a=[3,2,4,5,1,6]从小到大排列打印出来.
方法: 找出最大的放在最右边,然后排前 5 个.然后依次把最大的放在最右边.
选择排序(体育老师点人)
时间复杂度:O(n)
方法: 选出最小的一个放在最前面.然后看剩下的.
剩下的最小的再放前面.
插入排序(排扑克牌)
时间复杂度:O(n)
声明空数组.取第一张牌,第二个数字和数组中比较,比最后一个大,就放后面,比最后一个小,就往前放.
基数排序(桶排序)(整理扑克牌)
优点:
和计数排序不同的是一个桶里可放多个数字,效率高,计数排序的改良版,时间复杂度:O(N+C)
缺点:
需要 hash 工具,和计数排序不同的是每个桶里都是无序的,还要再排一次序
用途:
高考总分排序,每 100 分放在一个桶里,数字很分散的时候不好用,可用基数排序(比如从几十到几千)
有重复的数.类似于 4 张 1,4 张 2,4 张 3.拿到 1 放到最前面,2 依次,如果还是 1,放在 1 那一摞.每一种放一摞.最后排序.
快排
优点:
效率高,时间复杂度:O(n*log2n)
缺点:
有时候比计数排序慢
挑选一个数,放中间,比它小的放左边,比它大的放右边.它的位置就固定了.
看前面的部分,再挑一个数,比它小的放左边,比它大的放右边.后面的部分,再挑一个数,比它小的放左边,比它大的放右边.又有两个数固定了.