希尔排序(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;
                }
            }
        }
    }
    
}
相关文章
|
9月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
9月前
|
存储 算法 搜索推荐
Java代码实现希尔排序
Java代码实现希尔排序
51 0
|
9月前
|
算法 Java
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序...
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序
40 0
|
9月前
|
算法 搜索推荐 Java
希尔排序(Java)
希尔排序(Java)
|
算法 搜索推荐 Java
Java实现希尔排序
Java实现希尔排序
186 0
Java实现希尔排序
|
存储 搜索推荐 算法
数据结构 | 排序算法总结——(三)希尔排序排序(附Java实现代码)
数据结构 | 排序算法总结——(三)希尔排序排序(附Java实现代码)
数据结构 | 排序算法总结——(三)希尔排序排序(附Java实现代码)
|
搜索推荐 Java
希尔排序(简单易懂,图文并貌,插入排序)java代码实现
希尔排序(简单易懂,图文并貌,插入排序)java代码实现
163 0
希尔排序(简单易懂,图文并貌,插入排序)java代码实现
|
人工智能 算法 搜索推荐
Java数据结构与算法(六)-希尔排序
一、希尔排序的产生 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
1075 0
|
1天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
88 60
【Java并发】【线程池】带你从0-1入门线程池

热门文章

最新文章