排序算法
corefuture
啦啦啦
展开
-
排序算法-插入排序之希尔排序
首先我们来了解一个定理:交换相邻元素的任何排序算法平均时间为O(N^2)。 所以希尔排序通过比较一定间隔的元素来进行工作,各趟距离随算法减小,最后比较相邻元素完成排序。也就是说原来的插入排序是相邻的元素比较,而希尔排序是具有间隔的插入排序,这个间隔就是这个序列。 希尔排序使用增量序列:h1,h2,h3…ht;h1=1。使得每趟排序使数组a[i]<=a[i+hk]。最后一趟使a[i]<=a[i+1原创 2017-08-22 17:09:04 · 197 阅读 · 0 评论 -
排序算法-插入排序之直接插入
插入排序的思想是:每一步将元素插入到前面已经排序好数组的对应的位置。 代码:public class InsertionSort { public static void main(String[] args){ Integer[] array = new Integer[]{10,54,55,47,50,20,41,33,40,70}; sort(arr原创 2017-08-22 15:04:16 · 178 阅读 · 0 评论 -
排序算法-选择排序之堆排序
堆是一种除了底层节点外的完全填满的二叉树,底层可以不完全,左到右填充。堆在实现优先队列的时候很有用。堆又分为大根堆和小根堆。大根堆的父节点的值大于等于两个子节点的值。小根堆的父节点的值小于等于两个子节点的值。 堆排序的思想是:每次从堆中取出最小(大)值,将取出的元素按顺序排到数组中,这样所有的元素就是从小到大(从大到小)排列在数组中。我们可以把删除最小值得到的元素重新排在一个数组中,或者排在该数组原创 2017-08-22 23:05:36 · 183 阅读 · 0 评论 -
排序算法-归并排序
归并排序的思想是:将两个已经排序的数组,重新排序到一个数组中,所以只需要一趟,就能完成排序。 比如说有数组{14,20,50}和{45,68,96}和一个新数组{},进行从小到大排序; 第一趟下来,因为14比45小,三个数组分别为{20,50},{45,68,96},和新数组{14}; 第二趟下来,因为20比45小,三个数组分别为{50},{45,68,96},和新数组{14,20} 第三趟原创 2017-08-23 15:53:04 · 176 阅读 · 0 评论 -
排序算法-交换排序之快速排序
和归并排序一样,快速排序也是一种分治的递归算法。 快速排序的思想是:选取一个枢纽元,将比枢纽元小的元素放枢纽元前面,把比枢纽元小的元素放后面,然后将前面的集合,后面的集合,重复之前的步骤。 枢纽元的选取是一门学问,我们要将枢纽元的尽量选取为集合中间值,使得枢纽元两边的元素量能更加均匀,避免大小不等的递归调用。我们将第一个元素,中值元素,最后一个元素作比较,取大小在三者中间的元素作为枢纽元。 在原创 2017-08-23 22:12:52 · 264 阅读 · 0 评论