• 排序算法


    概念

    排序就是把一组无序的记录按其关键字的某种次序排列起来,使其具有一定的顺序

    分类

    按排序是否使用外存方式分

    内排序:排序全部在内存中进行,不涉及外存的排序方式称为内排序

    外排序:

    按相同记录排序前后相对次序是否发生变化分

    稳定排序:在排序的序列中,多个关键词相同的记录,排序前和排序后的相对次序保持不变,称为稳定排序

    不稳定排序:在排序的序列中,多个关键词相同的记录,排序前和排序后的相对次序变化了,称为不稳定排序

    具体排序方式

    • 插入排序,将序列分为两部分,一部分无序,一部分有序,每一次将无序区的一个元素插入到有序区合适的位置,使得有序区记录加1,无序区记录减1,经过length-1次插入即可
    • 希尔排序,插入排序的改进版,以一定增量将序列分组,然后分别对每组进行插入排序,使得每组有序,逐步减小增量,最终,增量为1,所有序列合为一组,进行一次插入排序即可
    • 冒泡排序,将序列分为两部分,一部分无序,一部分有序,通过冒泡的形式(两两交换)使的无序内最大的元素到达顶端(无序区末尾),使得有序区记录加1,无序区记录减1,经过length-1次冒泡即可
    • 选择排序,将序列分为两部分,一部分无序,一部分有序,每一次从无序区内选择一个最大的元素,加入到有序区,使得无序区记录减1,有序区记录加1,经过length-1次选择即可
    • 堆排序,序列索引满足完全n叉数特性,序列分为两部分,一部分无序,一部分有序,从无序区最后一个父亲节点开始依次往前构造最大堆,然后交换无序区根节点与最后一个叶子节点的值,使得有序区记录加1,无序区记录减1,保持堆特性,直到无序区只有一个元素为止,无序区中只要交换元素值,就有可能破坏某个节点的堆特性,需要递归保持
    • 基排序,借助桶排序(桶的索引代表一个值,桶内存储等于这个值的元素个数,初始为0,遍历待排序序列,将值等于桶索引的桶计数加1,最后遍历桶,输出有序序列),对序列按位从低到高进行桶排序,将同一位相同值的元素放入同一个桶里,桶内相对位置和当前桶排序前的元素相对位置保持不变,进行一次桶排序之后,将桶内元素串起来,对串起来的序列进行下一位的桶排序,直到按最高位桶排序结束,将桶内元素串起来即可
    • 归并排序,归并排序将序列分为两部分,A,B,保证A,B分别有序(递归),然后将A,B合为一组即可,归并核心在于合并
    • 快速排序,指定一个枢纽元,将序列分为左右两部分,左边元素都小于枢纽元,右边元素都大于枢纽元,然后分别对左右两部分进行排序,当待排序记录比较少的时候,可以用其他排序替代,完成排序

     代码实现

  • 相关阅读:
    Leetcode: Plus One Linked List
    Leetcode: Sort Transformed Array
    Leetcode: Rearrange String k Distance Apart
    Leetcode: Line Reflection
    Leetcode: Logger Rate Limiter
    Leetcode: Design Snake Game
    Leetcode: Android Unlock Patterns
    Leetcode: Longest Substring with At Most K Distinct Characters && Summary: Window做法两种思路总结
    Design Tic-Tac Toe
    Leetcode: Moving Average from Data Stream
  • 原文地址:https://www.cnblogs.com/peter-yan/p/8268378.html
Copyright © 2020-2023  润新知