选择排序,插入排序和希尔排序总结

1.选择排序

思想:在第i次循环中,找出后N-i个元素的最小值,并放在第i个元素的位置上,实现递增的排序。

JAVA实现代码:

 public static void sort(Comparable[] 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);  
         }  
}
其中 less函数的作用是判断a[j]是否小于a[min],exch函数的作用是交换数组a[]中第i与第min个的位置。
从上可以看出,当使用选择排序时,不论待排数组初始顺序如何,算法都要进行((N-1 ) +(N-2) + ... +1)=N*(N-1) /2 ~N平方/2 次比较  和 N次交换。
2.插入排序
思想: 想象有一副扑克,现要将扑克排序,左手中拿的已排好序的部分扑克,右手拿待排序的扑克每次添加一张牌来按顺序排好,每有一个新排进行排序时,都要按左手扑克的次序进行比较,插入到适当位置。
JAVA实现代码:
public static void sort(Comparable[] a)
{  int N = a.length;  
          for(int i=1;i<N;i++){   
              for(int j = i;j >0&&less(a[j],a[j-1]);j--)    
                   exch(a,i,j); 
         }  
}
less 与 exch 函数作用同上。
这段代码可以这么理解:插入n-1次新值,每次插入值时向前进行比较(由于前面的数字是有序的,当不满足less(a[j],a[j-1])时,j的值再减小也不会再满足),插入到合适的位置。
从上可以看出,当使用(直接)插入排序时,对于主键不重复的数组,最坏的情况需要((N-1 ) +(N-2) + ... +1)=N*(N-1) /2 ~N平方/2 次比较  和交换。最好情况下需进行N-1次比较和0次交换。所以平均情况需进行N平方/4次比较和交换。
3.希尔排序
思想:按照某一递增序列的大小对数组进行分组,对分组后的数组进行插入排序。是一种对插入排序的改进,使大数组可以先变为局部有序的小数组之和,再进行插入排序。
JAVA实现代码:

public static void sort(Comparable[] a){  int N = a.length;

  int h = 1;

  while(h<N/3) h = 3*h+1;    //建立递增序列  while(h>=1){

     for(int i=h;i<N;i++){

     for(int j = i;j>=h&&less(a[j],a[j-h]);j-=h)

          exch(a,j,j-h);

           }

      }  }

不是重点作为了解


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值