1.排序算法的分类 排序算法:基本排序,多路归并排序 基本排序:交换排序,选择排序,插入排序,合并排序 交换排序:冒泡排序,快速排序 选择排序:选择排序,堆排序 插入排序:插入排序,Shell排序 2.冒泡排序算法 (1)流程: 1.对数组中的各数据,依次比较相邻的两个元素的大小; 2.如果前面的数 ...
分类:
编程语言 时间:
2018-10-17 14:56:58
阅读次数:
161
这几天再看排序,有提到排序稳定性的问题。排序分为稳定(冒泡排序、插入排序、归并排序、基数排序)和不稳定(选择排序、快速排序、希尔排序、堆排序)。 看见过一个面试题问过排序算法稳定性的应用,当时不怎么理解,现在整理出来一些思绪。 给出一组数据(比如学生信息),每个数据都有不同的属性(成绩A,成绩B,等 ...
分类:
编程语言 时间:
2018-10-15 23:26:11
阅读次数:
370
概述 在N个乱序数字中查找第K大的数字,时间复杂度可以减小至O(N). 可能存在的限制条件: 要求时间和空间消耗最小、海亮数据、待排序的数据可能是浮点型等。 方法 方法一 对所有元素进行排序,之后取出前K个元素,时间复杂度高,不提倡。 思路:使用快排,选择排序,堆排序。 时间复杂度:O(n\ log ...
分类:
其他好文 时间:
2018-10-15 14:41:21
阅读次数:
183
关于排序: 这是排序的一些基本知识,下面是一些不常见的排序的个人理解: 希尔(shell)排序 :即是利用一个dist将整个序列利用二分分组,每次dist/2,其中a[1+dist k](0 ...
分类:
编程语言 时间:
2018-10-12 23:55:22
阅读次数:
208
最近在面试的时候经常能碰到让手写代码的,其中这三种经典排序算法更是出现频繁,在这里用C++总结一下,也算是备忘。 快速排序(QuickSort) 快速排序最经典的就是挖坑法,在第一个数字(把该数字作为temp,即枢轴量pivot)处挖坑用来存放右侧第一个比temp值小的数,然后坑的位置就变成了右侧这 ...
分类:
编程语言 时间:
2018-10-12 13:59:20
阅读次数:
141
再简单总结下堆排序的基本思路: a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆; b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端; c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。 ...
分类:
编程语言 时间:
2018-10-09 22:45:24
阅读次数:
228
外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。 外排序步骤 这就是归并排序在外排序中的应用。 对每块数据进行排序,可以使用各种内排序方法:快速排序、归并排序、堆排序等 ...
分类:
编程语言 时间:
2018-10-07 15:29:48
阅读次数:
155
排序算法 排序算法两阶段 第一阶段(比较排序) 插入排序 合并排序 堆排序 快速排序 第二阶段(非比较排序) 计数排序 基数排序 桶排序 第一阶段:比较排序 插入排序 插入排序的主要思想 : 将当前的元素放入前面合适的位置 插入排序的实现细节 : heap_sort小结: heap_sort中最重要 ...
分类:
编程语言 时间:
2018-10-06 20:40:56
阅读次数:
188
1、快速排序,上代码: 分析一哈: 当不考虑最差情况(O(n^2))时,快排时间复杂度为O(nlogn):因为层数为O(logn)即调用栈的高度是O(logn),而每层的时间是O(n)2、合并排序 采用分而治之的方法,先把数组分成一个个长度为1的数组,再将数组分别按顺序组合成一个数组 因此涉及到两个 ...
分类:
编程语言 时间:
2018-10-06 00:05:19
阅读次数:
190
数据结构--优先队列(堆排序) 优先队列:不是先进先出啦,下面的代码是大顶堆,大的先出。 在之前理解堆排序的基础上,在来理解优先队列。 还是用这个公式: leftNo = parentNo*2+1 rightNo = parentNo*2+2 parentNo = (nodeNo-1)/2 每次进队 ...
分类:
编程语言 时间:
2018-10-04 11:34:48
阅读次数:
158