美文网首页
算法分析[排序]

算法分析[排序]

作者: 哓晓的故事 | 来源:发表于2019-07-29 16:44 被阅读0次

1. 快速排序

快排最优复杂度是 O(n*log(n)),但是要使用辅助栈,总共要排序n次,每次查找中间值复杂度是O(logn)

75 快速排序, 此题用快排会超时,经典3种颜色,需要特殊处理

// 快排
void quick_sort(int[]arr, int low, inthigh){
         if (low>=high) return;
         // for找出中间值,O(logn)
         int i = partition(arr, low, high);
         // f(n/2) - 分治左
         quick_sort(arr, low, i-1);
         // f(n/2) - 分治右
         quick_sort(arr, i+1, high);
}
private int partition(int[] nums, int lo, int hi) {
        // 每次交换后, 都还是以p为中心点
        int p=nums[lo];
        while(lo<hi) {
            while(lo<hi && p<=nums[hi]) hi--;
            nums[lo]=nums[hi];
            // lo++; // 这里会导致数组为2时错误交换
            while(lo<hi && p>=nums[lo]) lo++;
            nums[hi]=nums[lo];
        }
        nums[lo]=p;
        return lo;
    }
// 空间换时间
private static void sortA(int[] nums) {
        Map<Integer, Integer> cs = new HashMap<>();
        for (int i : nums) {
            cs.put(i, cs.getOrDefault(i, 0) + 1);
        }
        int p = 0;
        for (Map.Entry<Integer, Integer> entry : cs.entrySet()) {
            Integer k = entry.getKey();
            Integer v = entry.getValue();
            for (int i = 0; i < v; i++) {
                nums[p++] = k;
            }
        }
    }
// 三色排序的特色,只需要2个标识能代表三色
// 中等值排在最前方,最小值每次出现都和中等值交换位置
// 最大值每次出现,都和最后k位交换位置
    private void quickB(int []nums) {
        // j 代表 1 开始的位置
        // k 代表 2 开始的位置
        int j=0, k=nums.length;
        for(int i=0; i<k; i++) {
            if(nums[i]==0) {
                swap(nums, i, j++);
            } else if(nums[i] == 2) {
                swap(nums, i--, --k);
            }
        }
    }

相关文章

  • 数据结构与算法第七讲 - 排序(上)

    对于排序算法,主要掌握内容如下: 排序算法的实现原理 手写出实现代码 评价及分析算法 本讲内容 如何分析一个排序算...

  • 2020-04-30-排序算法

    冒泡排序 直接选择排序 插入排序 快速排序 参考 算法学习笔记17-经典排序算法八大排序算法稳定性分析

  • 6基础算法之冒泡,插入,选择排序

    如何分析一个“排序算法”? 排序算法的执行效率 对于排序算法执行效率的分析,我们一般会从这几个方面来衡量: 最好情...

  • 第4章 结构体

    1、排序 算法分析 用结构体存储,并进行排序 时间复杂度 Java 代码 2、成绩排序 算法分析 先对分数从小到大...

  • 基础算法(查找 , 排序)

    算法分析 渐进符号 - (O , Ω , θ) 查找算法 二分查找 - O(logn) 排序算法 直接插入排序 -...

  • 【算法】排序(一)选择排序

    在排序算法中,最简单的莫过于选择排序了。 本文将介绍以下内容 排序思路算法实现(JAVA)测试阶段算法分析 排序思...

  • 算法:冒泡排序

    本文内容:1、什么是冒泡排序?2、冒泡排序的 C/OC 实现与算法分析。 算法总目录:算法? 1、什么是冒泡排序?...

  • 数据结构与算法--排序

    常用的排序算法 如何分析一个“排序算法”? 排序算法的执行效率 最好情况、最坏情况、平均情况时间复杂度 时间复杂度...

  • 数据时代,只有算法能洞悉数据的内在逻辑,让数据产生商业价值!

    本书介绍在互联网行业中经常涉及的算法,包括排序算法、查找算法、资源分配算法、路径分析算法、相似度分析算法,...

  • lecture 1

    算法导论Lesson1 课程简介: 内容主要包括: 算法的含义、意义的简要介绍; 算法的分析; 插入排序、合并排序...

网友评论

      本文标题:算法分析[排序]

      本文链接:https://www.haomeiwen.com/subject/nmzbrctx.html