排序算法之希尔排序

来源:互联网 发布:中国历史故事网软件 编辑:程序博客网 时间:2024/04/28 19:44
回到目录

1、基本思想

  在要排序的一组数中,按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

回到目录

2、代码示例

复制代码
package  sort;/** * 希尔排序(最小增量排序)  * */public class ShellSort {        public void TestSort() {        int a[]={1,54,6,3,78,34,12,45,56,100};         sort(a);        sort2(a);    }        public void sort(int arr[]){         //数组长度        int len=arr.length;         //临时变量        int temp=0;         //增量d(n/2,n为要排序数的个数)        int d=len;        while(true){            d=d/2;            //直接插入排序            for(int k=0;k<d;k++){                  for(int i=k+d;i<len;i+=d){                      int j=i-d;                      temp=arr[i];                      for(;j>=0&&temp<arr[j];j-=d){                          arr[j+d]=arr[j];                      }                      arr[j+d]=temp;                  }              }             if(d==1){                break;            }        }          for(int i=0;i<len;i++){            System.out.print(arr[i]+" ");          }    }         public void sort2(int arr[]){         //数组长度        int len=arr.length;         int i, j, gap;        for (gap = len / 2; gap > 0; gap /= 2) {//步长            for (i = 0; i < gap; i++)        //直接插入排序            {                for (j = i + gap; j < len; j += gap)                     if (arr[j] < arr[j - gap])                    {                        int temp = arr[j];                        int k = j - gap;                        while (k >= 0 && arr[k] > temp)                        {                            arr[k + gap] = arr[k];                            k -= gap;                        }                        arr[k + gap] = temp;                    }            }        }        for (i = 0; i < arr.length; i++){            System.out.print(arr[i] + " ");        }    }}
复制代码
回到目录

3、效率分析


出处:http://hehaiyang.cnblogs.com/
本博客内容主要以学习、研究和分享为主,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
0 0