算法——选择排序、插入排序和希尔排序(改进的插入排序)
3 月,跳不动了?>>> 选择排序 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此以往,直到 将整个数组排序。 性能 :算法的时间效率取决于比较的次数。对于长度为N的数组,选择排序需要大约N²/2次比较和N次交换。 特点 :1. 运行时间和输入无关 :比如即使输入一个有序的数列,还是会和随机数列一样,进行比较、交换处理。 2. 数据移动是最少的 :共N次交换,即交换次数和数组大小是线性关系。其他任何算法都不具备这个特征,大部分都是线性对数或是平方级别的。 函数实现如下: public class Selection { public static void sort(Comparable[] a) { //将a[]按升序排列 int N=a.length; for(int i=0;i<N;i++) { int min=i; for(int j=i+1;j<N;j++) { if(less(a[j],a[min]))min=j; } exch(a,i,min); } } } 插入排序 就像通常人们整理桥牌的方法一样,一张一张来,将每一张牌插入到其他已经有序的牌中的适当的位置。 在计算机中的实现中,为了给要插入的元素腾出空间