zoukankan      html  css  js  c++  java
  • 排序与基础数据结构

    6大排序与6大基础数据结构

    本文从冒泡排序撩起,对选择、插入、希尔、归并、快排6种经典的数组排序进行了深入分析,并详解其间的关联,让你深刻理解其中的关键点;同时对经典的数据结构Vector、Stack、Queue、树、Map、Set做了归纳总结,对其底层的实现做了解析,分享给大家,作为每一个中高级程序员应该懂得的算法与排序,祝大家早上走上自己的“成金之路”。

     
    目录:
    1.排序算法
    2.数据结构
    3.资料参考
     
    1.排序算法:
    a.起源:
    计算机从诞生起,就在模拟人这种智能生物的行为,而排序也来自于日常生活中,最经典的冒泡排序即来源于水泡从水底升上水面,离水面越近,水泡体积越大——由此诞生的冒泡排序思想即为:依次遍历每个元素,如果前一个比后一个大,则交换两者的位置。
    其缺点有二:第一点每次比较都会产生交换元素的行为,效率低;第二点,算法复杂度为O(n^2)
     
    b.针对缺点一的优化:
    选择排序:即每次遍历只记录最大元素的下标,最后进行元素交换;
     
    插入排序:当输入有序程度较高时,通过构建有序数组,并将新元素插入到有序数组中,完成整体的排序,降低元素交互的次数,缺点是不稳定;
    希尔排序:插入排序稳定稳定程度太低,因此通过主动构建有序对(间隔n、n/2、n/4...1的有序对),来提升“插入排序”的稳定性,是插入排序的一种改进。
     
    c.针对缺点二的优化:
    归并排序:采用“分治算法思想”,将输入一分为二,分别排序,通过“并行”思想来提升算法效率,复杂度为O(nlgn),但是需要额外的arr[n]空间,来进行合并;
    快速排序:对归并排序的改进,在不需要额外空间的情况下,对数组遍历,按对选定元素的比较进行划分,小的集中在左边,大的集中在右边;分别对两边进行排序——整体的思路与构建二叉树一致,其复杂度为O(nlgn)。
     
    d.伪代码总结如下:
    2.数据结构:
    教学视频参考斯坦福公开课《抽象编程》,地址为http://open.163.com/special/opencourse/abstractions.html 
    这里对主要的数据结构进行了拆解,如下图
    上图只是详解了其底层的结构,但是涉及到使用时,还需要提供一些常见接口,供调用者使用,如size()、iterator()/hasnext()/next()x、add()/remove()、contain()、isEmpty()等;见代码实现分享链接:http://pan.baidu.com/s/1hsoReNa 密码:h9q0。
  • 相关阅读:
    iOS-Core Text 入门
    Mac浏览器全屏设置
    Quartz 2D - 图形上下文(Graphics Contexts)
    Quartz 2D 概述
    Quartz 2D官方文档翻译(持续更新中)
    那些年,我们常掉进去的坑
    CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理 (转载)
    科大讯飞
    Object-C语言类的扩展
    科大讯飞语音识别
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/6621866.html
Copyright © 2011-2022 走看看