码迷,mamicode.com
首页 > 编程语言 > 详细

希尔排序

时间:2015-07-17 20:47:15      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

  1. void shellSort(int *arr,int Length){
  2. int temp;
  3. for(int gap=Length/2; gap>0;gap/=2){
  4. for(int i=0;i<gap; i++){
  5. for(int j=gap+i;j<Length;j+=gap){
  6. temp=arr[j];
  7. int k=j-gap;
  8. while(k>=0&&arr[k]>temp){
  9. arr[k+gap]=arr[k];
  10. k-=gap;
  11. }
  12. arr[k+gap]=temp;
  13. }
  14. }
  15. }
  16. }
上面的希尔排序很简单:
    该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
   技术分享
技术分享
  1. for(int gap=Length/2; gap>0;gap/=2)
这是是设置不同的步长进行排序,每次步长除2.
  1. for(int i=0;i<gap; i++)
这是对每组进行排序,如第一次分成两组,步长就是gap=10/2=5
则有了5组了。
技术分享
  1. for(int j=gap+i;j<Length;j+=gap){
  2. temp=arr[j];
  3. int k=j-gap;
  4. while(k>=0&&arr[k]>temp){
  5. arr[k+gap]=arr[k];
  6. k-=gap;
  7. }
  8. arr[k+gap]=temp;
  9. }
组内进行插入排序。




















希尔排序

标签:

原文地址:http://www.cnblogs.com/yml435/p/4655556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!