排序算法
chris_hhao
这个作者很懒,什么都没留下…
展开
-
整理排序算法(七):快速排序
/** * 快速排序: * 找两个哨兵,一个从头i,一个从尾j * 设置一个基准tmp * i和j与tmp比较, * 如果i<tmp,i++ * 如果i>tmp,i和j交换位置 * 再比较的话就变成 * 如果j>tmp,j-- * 如果j<tmp,i和j交换位置又变成之前的状...原创 2019-12-05 15:00:24 · 115 阅读 · 0 评论 -
整理排序算法(六):归并排序
/** * 归并排序: * 把数组分成两部分。每两部分再分成两部分排序,递归。 * 一直分成每部分只有一个元素。 * 再合并。就变成整体有序了。 * * * 时间复杂度:O(nlogn) * 空间复杂度:O(N),归并排序需要一个与原数组相同长度的数组做辅助来排序 * 稳定性:归并排序是稳定的排序算...原创 2019-12-04 18:28:15 · 347 阅读 · 0 评论 -
整理排序算法(五):堆排序
/** * 堆排序(大顶堆) * 将记录看成一个顺序存储的二叉树 * 先构建大顶堆,所有节点都比他的儿子大或者等于。 * 第一步:从最后一个非叶子节点开始比较,一直到根。 * 构建大顶堆成功。 * 第二步:根与最后的叶子节点交换位置 * 第三步:除去刚才的叶子节点,再次构建大顶堆, * ...原创 2019-12-04 14:30:34 · 123 阅读 · 0 评论 -
整理排序算法(四):希尔排序
/** * 希尔排序: * 每次都将元素分成一些小组,在小组内进行排序。 * 小组根据元素数量划分。 * 小组跨度一般是元素数量的一半。 * 此后每次跨度都除以二。 * 一直到最后,小组跨度变成1。 * 这样就变成插入排序了。 * <p> * 希尔排序的复杂度和增量序列是相关的 ...原创 2019-12-03 16:25:47 · 111 阅读 · 0 评论 -
整理排序算法(三):插入排序
/** * 插入排序: * 将一个记录插入已经排好序的新序列 * * 1,当初始序列为正序时,只需要外循环n-1次,每次进行一次比较,无需移动元素。 * 此时比较次数(C _{min})和移动次数(M_{min})达到最小值。 * C _{min}=n-1 * M_{min}=0 * 此时时间复杂度为O(n)...原创 2019-12-03 10:28:22 · 94 阅读 · 0 评论 -
整理排序算法(二):简单选择排序
/** * 简单选择排序: * 记录下未排序最小的元素,把它放在已排序最后一个位置(当前未排序的第一个位置) * * 算法性能: * 对于长度为N的序列,选择排序每一趟选择最小元素,都要比较未排序元素的大小, * 所以比较总次数为:(N-1)+(N-2)+……+2+1=N(N-1)/2; * 每次选出最小元素进行交换都...原创 2019-12-02 17:39:12 · 153 阅读 · 0 评论 -
整理排序算法(一):冒泡排序
/** * 冒泡排序: * 比较相邻两个值,如果第一个比第二个大,就交换位置。 * 全部比较一次,一直到剩下最后一个 * 这样每次都会把剩下最大的一个值找出来,放在最后一个位置上 * * * 最好的时间复杂度 * 若数组的顺序是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动的次数M都是最小的值...原创 2019-12-02 16:38:32 · 127 阅读 · 0 评论