
算法与数据结构
另一只羊
这个作者很懒,什么都没留下…
展开
-
排序之归并排序
归并排序归并排序和快速排序的思想一样,都是依据分治法(递归)。 两者不同的是,归并需要对子问题的解进行合并,即合并两个已排序的表,合并的时间为线性的,最多进行了N-1次比较,其中N是元素的总数。归并排序的基本思路就是将数组分成二组A和B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了? 可以将A,B组各自再分成二组。依次类推,当分出来的小组只有原创 2017-06-28 16:36:57 · 217 阅读 · 0 评论 -
排序之直接插入排序
直接插入排序思想将一个记录插入到已排序好的有序表中,从而得到一个记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。代码实现package sort;public class InsertSort { public static void insertSort(int[] data) { if (data =原创 2017-07-05 13:49:12 · 288 阅读 · 0 评论 -
排序之简单选择排序
简单选择排序思想固定了位置来找相应的元素。 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。代码实现package sort;//选择排序:固定位置找元素//插入排序:固定元素找位置public class SimpleSelect原创 2017-07-05 15:32:23 · 391 阅读 · 0 评论 -
排序之冒泡排序
冒泡排序思想在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。代码实现package sort;public class BubbleSort { public static void bubbleSort(int[] data) {原创 2017-07-05 16:11:04 · 281 阅读 · 0 评论 -
排序算法总结
希尔排序是不稳定的。 简单选择排序是不稳定的,{2,2,1}。 堆排序是不稳定的。 快速排序是不稳定的。对n较大的排序记录。一般的选择都是时间复杂度为O(nlog2n)的排序方法:快速排序(不稳定)、堆排序(不稳定)或归并排序(稳定)。原创 2017-07-05 16:44:50 · 221 阅读 · 0 评论 -
排序之快速排序
分治法分解问题解决子问题合并子问题的解快速排序思想分治法:递归 1. 选取privot(中枢):随机的选取一个元素作为中枢; 2. 分割策略:partition算法将数组进行分割,使中枢左边的数组元素均小于中枢,中枢右边的数组元素均大于中枢; 3. 这样就分解为两个子数组,分别对子数组进行递归操作。代码实现/** * 快速排序的递归实现 * @param da原创 2017-06-27 22:19:21 · 309 阅读 · 0 评论 -
排序之堆排序
堆排序算法介绍堆是一种重要的数据结构,为一棵完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1),如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2,如果有父节点,父节点的位置是(n-1)/2取整。分为最大堆和最小堆,最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结点。所谓堆排序就是利用堆这种数据结原创 2017-06-28 00:36:34 · 288 阅读 · 0 评论