常见排序算法
常见排序算法Java实现
参考《算法导论》《数据结构高分笔记》
氵冫丶
这个作者很懒,什么都没留下…
展开
-
排序算法比较
就下图吧原创 2016-07-06 20:45:20 · 465 阅读 · 0 评论 -
桶排序
思想桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为O(n)O(n)。桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn)O(nlogn) 下限的影响。桶排序按下面4步进行: 设置固定数原创 2016-07-04 21:44:39 · 653 阅读 · 0 评论 -
基数排序
思想类似于桶排序,按照某种规则将相同规则的数放在一起,最后使得序列有序。基数排序是按照数字每位数出现的数字进行排序,每位数出现的数字可能是:0、1、2、3、4、5、6、7、8、9,按照这10个数分到不同的桶中,第一次按照个位数分桶,第二次按照十位数分桶,第三次按照百位数分桶,…,最后按照最高分为分桶,这样最后的数组就是有序的。例子例子说的很明白算法求数字num第pos位上的数 /**原创 2016-07-04 20:07:05 · 2199 阅读 · 0 评论 -
计数排序
思想计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k是为某个整数。 对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放在它在输出数组中的位置上。假设序列中小于元素x的个数为a,则直接把x放到第a+1个位置上。 假设序列中小于等于元素x的个数为b,则直接把x放到第b个位置上。 由于下标是从0开始的,而记录的b至少是1,所有在程序中应该需要减1 当存在原创 2016-07-04 17:09:40 · 2823 阅读 · 0 评论 -
堆排序
思想堆是什么? 堆是一个数组,它可以被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素。除去最底层外,该树是完全充满的,而且从左到右填充。 堆分为大顶堆和小顶堆 大顶堆:结点 i 的值 都大于其左右孩子结点的值 小顶堆:结点 i 的值 都小于其左右孩子结点的值 如何建堆? 建堆的过程是一个不断将元素插入到堆的过程。这里的插入过程,和插入排序很类似,插入排序重点是找到插入的位原创 2016-07-04 16:21:32 · 563 阅读 · 0 评论 -
归并排序
思想归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。步骤归并排序工作原理:(假设序列共有n个元素): 1.将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素 2.将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素 3.重复步骤2,直到所有元素排原创 2016-07-04 15:27:14 · 649 阅读 · 0 评论 -
简单选择排序
思想从头到尾扫描序列,找到最小的一个元素,与第一个元素交换,接着在剩下的元素中继续找最小交换,使得最终有序步骤1.选择第1小的元素,放在第一个位置 2.选择第2小的元素,放在第二个位置 3.直到所有元素均排序例子动画算法package alg.sort;public class SelectSort { public void sort(int[] A){ int n =原创 2016-07-01 17:14:02 · 486 阅读 · 0 评论 -
快速排序
思想快速排序是基于分治策略的。对一个子数组A[p…r]快速排序的分治过程的三个步骤为:分解:数组A[p…r]被划分成两个(可能空)子数组A[p…q-1]和A[q+1…r],使得A[p…q-1]中的每个元素都小于等于A[q],且小于等于A[q+1…r]中的元素。下标q也在这个划分过程中进行计算。解决:通过递归调用快速排序,对子数组A[p…q-1]和A[q+1…r]排序。合并:因为两个子数组就是原地排序原创 2016-07-01 16:42:42 · 461 阅读 · 0 评论 -
冒泡排序
思想它是经过一系列的交换动作。首先第一个元素和第二个元素比较,如果第一个大,则二者交换,否则不交换;然后第二个元素和第三个元素交换,若果第二个元素大,则交换,否则不交换……直到按照这种方式进行下去,最终最大的那个元素被交换到最后一个位置,一趟冒泡排序完成。下一趟排序同样上面的操作,但是只交换到倒数第二个位置,这个位置是第二大的元素。直到一趟排序中没有交换元素时候排序结束。这样每次把一个元素找到对应位原创 2016-07-01 16:24:16 · 560 阅读 · 0 评论 -
折半插入排序
思想直接插入排序其插入位置是在部分排序数组的后面开始判断找到插入位置,而折半插入排序是利用二分查找的方式找到插入位置算法package alg.sort;public class BinInsertSort { public void sort(int[] A){ int n = A.length; for(int i=1;i<n;i++){原创 2016-07-01 16:03:01 · 878 阅读 · 0 评论 -
直接插入排序
思想每次将一个待排序的元素作为关键字,按照其关键字值的大小插入的已经排号的部分序列中的适当位置,直到插入完成步骤1.从第一个元素开始,该元素可以认为已经被排序 2.取出下一个元素,在已经排序的元素序列中从后向前扫描 3.如果该元素(已排序)大于新元素,将该元素移到下一位置 4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 5.将新元素插入到该位置中 6.重复步骤2例子 图来源原创 2016-07-01 15:22:30 · 470 阅读 · 0 评论