2016年4月3日
摘要: 题目描述 输入: 每个测试案例包括两行: 第一行包含一个整数n和k,n表示数组中的元素个数,k表示两数之和。其中1 <= n <= 10^6,k为int 第二行包含n个整数,每个数组均为int类型。 输出: 样例输入: 样例输出: 阅读全文
posted @ 2016-04-03 22:17 韩思明 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 今天好好的把各种排序都总结了一下,感觉印象加深了不少! 下面列出各种排序: 1.插入排序 2.冒泡排序 3.快速排序 4.归并排序 5.选择排序 6.堆排序 7.希尔排序 阅读全文
posted @ 2016-04-03 17:30 韩思明 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 基本思想 1.把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。2.随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。 代码实现 效率分析 不稳定 空间复杂度:O(1) 时间复杂度:O(nlog2n) 最坏情 阅读全文
posted @ 2016-04-03 17:21 韩思明 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 基本思想 1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区; 2)将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,......Rn-1)和新的有序区(Rn),且满足R[1,2...n-1]<=R[n]; 3)由于交换后新的堆顶R[1] 阅读全文
posted @ 2016-04-03 16:54 韩思明 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 基本思想 选择排序首先遍历列表,并且将最小的元素与第一个元素进行比较,随后遍历剩余的元素并将次小的元素与第二个元素进行比较,依次类推。选择排序是和冒泡排序差不多的一种排序。和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换。 代码实现 效率分析 不稳定 空间复杂度:O 阅读全文
posted @ 2016-04-03 15:55 韩思明 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 基本思想 归并排序是建立在归并操作上的一种有效的排序算法。 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将一个数组分为越来越小的子列表,每个子列表单独进行排序,然后合并形成更大的有序列表。 通过归并子列表元素来合并子列表就是归并排序(Merge Sort) 代码 阅读全文
posted @ 2016-04-03 15:40 韩思明 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 基本思想 通过使用一个基准值将列表分为2个子列表,具体的过程是: 将基准值放在正确的位置上,在一个子列表中放入小于基准值的元素,另一个子列表中放入大于基准值的元素。 这就是快速排序(Quick Sort)的思想。 快排算法提供了目前已知最快的排序技术,除了某些极其特殊的情况下之外,快速排序徐几乎适用 阅读全文
posted @ 2016-04-03 14:55 韩思明 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 基本思想 冒泡排序的基本概念是依次比较相邻的两个元数,将小的数放在前面,大的数放在后面。 即在第一趟排序中,首先比较第1个数和第2个数,将小数放前,大树放后; 然后比较第2个数和第3个数,将小数放前,大数放后。以此类推,如此继续,直到比较最后两个数,将小数放前,大数放后。至此,第一趟排序结束,将最大 阅读全文
posted @ 2016-04-03 11:36 韩思明 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 基本思想 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。 插入排序非常类似于整扑克牌。 在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较 阅读全文
posted @ 2016-04-03 10:52 韩思明 阅读(214) 评论(0) 推荐(0) 编辑