zoukankan      html  css  js  c++  java
  • 排序算法直接插入排序(希尔)

    思路:

    1.i从0开始,j从i+1开始,j往前比较如果比他大(小)交换,直到不能交换为止,说明找到了插入位置,一次遍历完成。

    public class InsertSort {
        // 直接插入排序:
        // 将当前数插入到已有的数组中,使之有序:
        // j从i+1开始往前直到找到一个比他大(小)的数为止,一直交换
        @Test
        public void test(){
            int[] a = {1,2,5,8,3,4,6,9,7};
            sort(a);
            System.out.println(Arrays.toString(a));
        }
        public void sort(int[] a){
            for(int i=0; i<a.length-1; i++){
                for(int j=i+1; j>0; j--){
                    if(a[j] < a[j-1]){
                        a[j] += a[j-1];
                        a[j-1] = a[j] - a[j-1];
                        a[j] -= a[j-1];
                    }else{
                        break;
                    }
                }
            }
        }
    }

    当使用多步长时变为希尔排序:

    public void xierSort(int[] a){
            int h=1;
            // 确定步长
            while(h<a.length/3){
                h = 3*h+1;
            }
            for(;h>=1;h/=3){
                for(int i=0; i<a.length-h; i+=h){
                    for(int j=i+h; j>0; j-=h){
                        if(a[j] < a[j-h]){
                            a[j] += a[j-h];
                            a[j-h] = a[j] - a[j-h];
                            a[j] -= a[j-h];
                        }else{
                            break;
                        }
                    }
                }
            }
        }
  • 相关阅读:
    centos7下更新firefox
    Centos7宽带连接
    CAS和AQS
    java中锁的概念
    并发队列
    Callable和Future
    juc下的并发工具类和线程池
    死锁和线程安全的问题
    HashMap源码分析(java1.8)
    List集合框架面试题
  • 原文地址:https://www.cnblogs.com/wsZzz1997/p/14731714.html
Copyright © 2011-2022 走看看