希尔排序(java)

简介: 希尔排序(java)

要点:在插入排序之前,调控数组的顺序 ,减少数据移动。

   

 

package org.minos.sort;
 
import java.util.Arrays;
 
public class ShellSort {
    public static void main(String[] args) {
        //int[] arr={8,9,1,7,2,3,5,4,6,0};
        //shellSort2(arr);
        //System.out.println(Arrays.toString(arr));
        int maxLength=800000;
        int[] arr=new int[maxLength];
 
        for (int i = 0; i < maxLength; i++) {
            arr[i]= (int) (Math.random()*maxLength);
        }
        long start = System.currentTimeMillis();
        shellSort2(arr);
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
//    希尔排序交换法
    public static void shellSort(int[] arr){
        int temp=0;
        int start=arr.length/2;
        while (start>0){
            for (int i = start; i < arr.length; i++) {
                for (int j = i - start; j >= 0; j -= start) {
                    if (arr[j] > arr[j + start]) {
                        temp = arr[j];
                        arr[j] = arr[j + start];
                        arr[j + start] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(arr));
            start=start/2;
        }
    }
    //希尔排序法->移位法
    public static void shellSort2(int[] arr){
        //增量gap,并逐步的缩小增量
        for (int gap = arr.length/2; gap >0; gap/=2) {
        //    从第gap个元素,逐个对其所在的组进行直接插入排序
            for(int i=gap;i<arr.length;i++){
                int j=i;
                int tem=arr[j];
                if(arr[j]<arr[j-gap]){
                    while (j-gap>=0&&tem<arr[j-gap]){
                    //    移动
                        arr[j]=arr[j-gap];
                        j-=gap;
                    }
                //    当退出while后,就给temp找到插入的位置
                    arr[j]=tem;
                }
            }
        }
    }
    
}
目录
相关文章
|
3月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
3月前
|
存储 算法 搜索推荐
Java代码实现希尔排序
Java代码实现希尔排序
21 0
|
3月前
|
算法 Java
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序...
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序
20 0
|
3月前
|
算法 搜索推荐 Java
希尔排序(Java)
希尔排序(Java)
|
算法 搜索推荐 Java
Java实现希尔排序
Java实现希尔排序
148 0
Java实现希尔排序
|
存储 搜索推荐 算法
数据结构 | 排序算法总结——(三)希尔排序排序(附Java实现代码)
数据结构 | 排序算法总结——(三)希尔排序排序(附Java实现代码)
数据结构 | 排序算法总结——(三)希尔排序排序(附Java实现代码)
|
搜索推荐 Java
希尔排序(简单易懂,图文并貌,插入排序)java代码实现
希尔排序(简单易懂,图文并貌,插入排序)java代码实现
136 0
希尔排序(简单易懂,图文并貌,插入排序)java代码实现
|
人工智能 算法 搜索推荐
Java数据结构与算法(六)-希尔排序
一、希尔排序的产生 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
1049 0
|
6天前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。