A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 代瑞朋 中级黑马   /  2013-11-21 12:14  /  1635 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 代瑞朋 于 2013-11-22 09:47 编辑

对给定数组进行排序。
{5,1,6,4,2,8,9}   可以是选择排序 冒泡排序。  老师说最快的是希尔排序
求希尔排序代码 ?参考

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
田磊阳 + 1
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
直接百度   希尔排序涉及的算法不是我们能够理解的   
回复 使用道具 举报
public class shellsort {   
    static void sort(int[]a,int dk){   
        int i,j,temp;   
        for(i=dk;i<a.length;i++){   
            if(a[i]<a[i-dk]){   
                temp=a[i];   
                a[i]=a[i-dk];   
                for(j=i;j>0&&temp<a[j-1];j=j-dk){   
                    a[j]=a[j-1];   
                }   
                a[j]=temp;   
            }   
        }   
    }   
    public static void main(String args[]){   
        int[]a={5,1,6,4,2,8,9};   
        int w=1;   
        while(w<=a.length/5){   
            sort(a,w);   
            w=w*5+1;   
        }   
        for(int i=0;i<a.length;i++){   
            System.out.print(a[i]+" ");   
        }   
    }   
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。,
  1. package cn.itcase;
  2. import java.util.Arrays;//导包
  3. public class SortTest {//测试类
  4. public static void main(String[] args) {
  5. int[] arr = { 2, 5, 3, 1, 4 };//定义字符串

  6. System.out.println("排序前:" +Arrays.toString(arr));
  7. ShellSort.sort(arr);
  8. System.out.println("排序后:" + Arrays.toString(arr));
  9. }

  10. /*
  11. * 交换数组中的两个元素
  12. */
  13. public static void swap(int[] data, int i, int j) {
  14. int temp = data[i];
  15. data[i] = data[j];
  16. data[j] = temp;
  17. }
  18. }


  19. class ShellSort {//定义自定义类
  20. public static void sort(int[] data) {
  21. for (int i = data.length / 2; i > 2; i /= 2) {
  22. for (int j = 0; j < i; j++) {
  23. insertSort(data, j, i);
  24. }
  25. }
  26. insertSort(data, 0, 1);
  27. }

  28. /**
  29. * @param data
  30. * @param j
  31. * @param i
  32. */
  33. private static void insertSort(int[] data, int start, int inc) {
  34. for (int i = start + inc; i < data.length; i += inc) {//循环
  35. for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc) {//循环判断
  36. SortTest.swap(data, j, j - inc);
  37. }
  38. }
  39. }
  40. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
public class Shell
{
    public void shell_sort(int [] arrays){
        for(int d=5;d>0;d=d-2){
            for(int c=0;c<arrays.length-d;c++){
                for(int i=c;i<arrays.length;i=i+d){
                    for(int j=i;j>0;j=j-d){
                        if(j<d)
                            break;
                        if(arrays[j]<arrays[j-d]){
                            int tmp;
                            tmp=arrays[j];
                            arrays[j]=arrays[j-d];
                            arrays[j-d]=tmp;

                        }
                    }
                }
               
            }
            sop(arrays);
        }
        
    }
    public void sop(int[] arrays){
        for(int i=0;i<arrays.length;i++){
            System.out.print(arrays[i]+" ");

        }
        System.out.println();
    }
    public static void main(String[] args)
    {
        Shell s=new Shell();
        int[] a={5,1,6,4,2,8,9};
        s.shell_sort(a);

    }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马