Java数据结构之排序】的更多相关文章

一.引子:想要给ArrayList排序却发现没有排序方法?你有两种选择:        1.换用TreeSet:     2.使用Collection.sort(List<T> list) / Collection.sort(List<T> list, Comparator<? super T> c)方法. 二.展开分析Java的几种主要数据结构及其排序方法: LinkedList 高效操作元素 TreeSet  不重复,有序 HashSet 不重复,快速查找 Hash…
希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能.这样可以让一个元素可以一次性地朝最终位置前进一大步.然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快). 假设有一个很小的数据在一个已按升序排好序的数组的末端.如果用复杂度为O(n2)的排序(冒泡排序或插入排序),可能会进行n次的比较和交换才能将该数据移至正确位置.而希尔排序会用较大的步长移动数据,所以小数据只需进行少数比较和交换即可到正确位置. pac…
选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动元素的排序方…
1.冒泡排序:时间复杂度为O(n2) 假设是由小到大排序:相邻两个数之间进行比较,较大的数在后面.一次比较过后最大的数排在最后面 如:40.8.15.18.12一次排序后为:8.15.18.12.40依次排好直到由小到大拍好 for(int i = 0;i < n-i; i++){ for(int j = 0;j < n-1-i;j++){ //最后几位已经排好的就不需要再排序了 if(a[j] > a[j+1]){ k= a[j]; a[j] = a[j+1]; a[j+1] = k;…
冒泡排序:是经过n-1趟子排序完毕的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数.大泡在上,小泡在下. 选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到所有待排序的数据元素排完. 选择排序是不稳定的排序方法. 插入排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据…
希尔排序的基本介绍: 希尔排序同之前的插入排序一样,它也是一种插入排序,只不过它是简单插入排序之后的一个优化的排序算法,希尔排序也被称为缩小增量排序. 希尔排序的基本思想: 希尔排序是把数组中给定的元素按照下标的一定增量进行分组,在分组之后,对每组使用直接插入排序算法:随着增量的减少,每组包含的元素越来越多,当增量减少到1的时候,整个数组正好被分成一组,此时该算法终止.通常我们判断增量是通过:第一次的增量=数组的长度/2(取整),第二次的增量=第一次的增量/2(取整)...一直到增量为1结束.…
插入排序的基本介绍: 插入排序是对想要排序的序列以插入的方式寻找该元素的适当的位置,从而达到排序的目的. 插入排序的基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时,有序表只有一个元素(整个序列的第一个元素看成有序表的第一个元素),无序表中有n-1个元素,在接下来的排序过程中,每次从无序表中取出一个元素,将它依次与有序表中的元素进行比较(注意:与有序表中元素比较的顺序是从后向前),将它插入到有序表中的适当的位置,使其成为新的有序表. 插入排序的基本思路图: 接下来,我会通过代码讲…
简单选择排序的介绍: 从给定的序列中,按照指定的规则选出某一个元素,再根据规定交换位置后达到有序的目的. 简单选择排序的基本思想: 假定我们的数组为int [] arr = new int[n],第一次我们从arr[0]~arr[n-1]中选择出最小的值与arr[0]交换.第二次我们从arr[1]~arr[n-1]中选择出最小的值与arr[1]交换.第三次我们从arr[2]~arr[n-1]中选择出最小的值与arr[2]交换,...,第i次我们从arr[i-1]~arr[n-1]中选择出最小的值…
冒泡排序的基本思想: 通过对待排序序列从前到后(从下标小的元素开始),依次比较相邻位置的元素的值,若发现与给定的次序冲突,则交换位置(假设数值大的数放在序列的后面),使数值较大的元素逐渐从前移动到后部,就像冒泡一样. 对于冒泡排序,我们可以对它进行一定的优化: 在排序的过程中,每个元素都不断的接近自己的位置,当在一次排序中,我们发现,使用冒泡排序之后,该序列的任何两个个元素都没有进行交换,这个时候说明该序列已经有序,我们就不需要继续进行排序算法了,此时我们推出该排序算法.如果要执行这个优化,我们…
//================================================= // File Name : Heap_demo //------------------------------------------------------------------------------ // Author : Common //类名:Node_Heap //属性: //方法: class Node_Heap{ public int iData; public Node…