上一篇中写了选择排序和插入排序,都是O(N^2)级别的,这篇将要实现的归并排序和快速排序都是O(Nlog(N))级别的。 归并排序 思路;首先将要排序的数组分成两部分,left_part,right_part,之后将排好序的left_right和right_part归并起来,同原始数组一样,被分成的 ...
分类:
编程语言 时间:
2018-07-14 22:41:03
阅读次数:
236
选择排序 选择排序的思想非常简单,很多书或技术Blog都讲的很好,这里不赘述了,直接给出代码 如果考虑通用性,可以使用模板函数 插入排序 插入排序的思想非常简单,无论是经典教材《算法导论》还是不少技术文章都以扑克牌为例,手里的牌是有序的,每拿到一张新牌会为它在排好序的牌中找出合适的位置插入。 代码如 ...
分类:
编程语言 时间:
2018-07-14 18:24:25
阅读次数:
167
这三种排序虽然用处不多,并且效率不高,但是它们都是稳定的排序算法,并且容易混淆,这里给出实现代码帮助读者区分 首先是插入排序 插入排序的实现思路真的就是把当前元素插入到对应自己大小的位置上,然后比它大的这些元素都往后挪动一位,但是写的时候要注意对下标的控制,否则容易出错 然后是选择排序 选择排序有两 ...
分类:
编程语言 时间:
2018-07-13 17:44:23
阅读次数:
195
总结一下学习的复杂度为O(n^2)的三种排序算法:选择排序,插入排序,希尔排序。 (1)选择排序:从第一个位置开始每次查找剩下的位置中最小的数值放入当前位置; (2)插入排序:从第二个位置开始,每次都将当前位置的数值插入前面合适的位置,对于几乎有序的数列来说,插入排序能带来更高的效率; (3)希尔排 ...
分类:
编程语言 时间:
2018-07-12 19:53:29
阅读次数:
159
1. 冒泡排序从第一个元素开始与右侧元素两两比较并交换,直到右侧成为有序部分。 2. 选择排序有序部分在左侧,在剩余元素中找到最小的那个元素,并与剩余元素中第一个元素交换。 3. 插入排序有序部分在左侧,将剩余元素中第一个元素不断向左交换,直到此元素处于有序部分恰当位置。 4. 希尔排序取一个间隔值 ...
分类:
编程语言 时间:
2018-07-12 16:35:10
阅读次数:
156
一、选择排序 简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。 在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现 ...
分类:
编程语言 时间:
2018-07-11 19:53:48
阅读次数:
146
选择排序:一个列表被分为无序列表和有序列表,选择排序就是拿无序列表的第一个和后面的每一个相比较,每一趟选择出最小的一个,添加进有序列表。 ...
分类:
编程语言 时间:
2018-07-09 23:10:35
阅读次数:
182
排序算法,可以分为内部排序和外部排序两大种。这篇文章主要对内部排序进行介绍。内部排序又分为两类,基于比较的非线性时间类,和非比较的线性时间类。前一类又可以分为四种,交换排序(包括冒泡排序和快速排序),插入排序(包括简单插入排序和希尔排序),选择排序(包括简单选择排序和堆排序)以及归并排序;后者主要包 ...
分类:
编程语言 时间:
2018-07-09 19:50:47
阅读次数:
179
讲述内存中的基础 数据结构 ,数组擅长找元素,链表擅长找位置,为了适应对数据不同的操作要求,应当灵活使用。 1. 内存的工作原理 计算机内存犹如有很多抽屉的柜子. 2. 数组和链表 数组中元素的位置称为索引 元素xx位于索引xx处 数组与链接不同操作对应的时间复杂度 3. 选择排序 定义:遍历这个数 ...
分类:
编程语言 时间:
2018-07-07 23:04:51
阅读次数:
179