随笔分类 - 算法
摘要:堆排序(升序为例) 思路: 1. 首先要建一个大顶堆 2. 交换堆顶元素与最后一个元素,堆的size 1 3. 重复第二步,直至堆中只有元素一个 \ 最好、最坏、平均时间复杂度:O(nlogn) \ 空间复杂度: O(1) \ 稳定性: 不稳定
        阅读全文
            
摘要:冒泡排序(升序为例) 思路: 1. 从头开始比较每一对相临的元素,其后者比前者大则交换,直到一轮比较结束 2. 排除1中找到最大的元素,重复1的步骤 Swift class SelectionSort { var array = [5, 7, 2, 8, 9, 4, 7, 3, 2] func so
        阅读全文
            
摘要:计数排序(升序为例) 思路:主要思想是统计每个整数在序列中出现的次数,进而推出每个数在序列中的位置 1. 找出序列中最大最小值,最小值 min, 最大值 max 2. 新建一个counts数组,范围是 [0, max min], 先存储每个元素出现的次数,然后遍历该数组,使用每个位置存储的值是当前元
        阅读全文
            
摘要:希尔排序(升序为例) 希尔排序的思想:将序列看成一个矩阵,根据一个步长序列将原序列分成m个列,逐列进行排序,直到列数变为1列为止 因此希尔排序的时间复杂度与步长关系密切。 希尔本人给出的步长序列为: n / (2^k),其中n为序列元素的个数,k = 1,取整数 举例: 序列元素有32个,那步长序列
        阅读全文
            
摘要:归并排序(升序为例) 思路: + 1. 将当前序列平均分割成2q个子序列,直到不能再分割(即序列中只剩下1个元素) + 2. 再不断的将2个子序列合并成一个有序序列,直到最终合成1个序列 \ 最好、最坏、平均时间复杂度:O(nlogn),因为每次分割都是平分 \ 空间复杂度: O(n) \ 稳定性:
        阅读全文
            
摘要:插入排序(升序排序为例) 思路: + 1. 将序列分为两个部分,头部已经排好的和后面待排序的 + 2. 从头部开始遍历每一个元素,然后插入头部已排好序的恰当位置 Swift class InsertionSort { var array = [5, 7, 2, 8, 9, 4, 7, 3, 2] /
        阅读全文
            
摘要:快速排序(选择升序排序) 思路 + 1. 从序列中选择一个枢轴(支点,pivot),假设每次选择索引0位置为支点 + 2. 利用支点将序列分割成两个子队列 小于支点的放在支点的左侧 大于支点的放在支点的右侧 等于支点的左右都可以(这里相等放右边) + 3. 对子序列进行1,2操作,直到不能再分割(也
        阅读全文
            
                    
                
浙公网安备 33010602011771号