From 4bbb9ec2defdeed98b4137cbdd95657a17a327e7 Mon Sep 17 00:00:00 2001 From: liangjinglin Date: Thu, 16 Jan 2025 16:56:23 +0800 Subject: [PATCH] =?UTF-8?q?2025-01-16=20=E5=B8=8C=E5=B0=94=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/SortAlgori/ShellSort.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/dataANDcalc/java/SortAlgori/ShellSort.java diff --git a/src/dataANDcalc/java/SortAlgori/ShellSort.java b/src/dataANDcalc/java/SortAlgori/ShellSort.java new file mode 100644 index 0000000..7f438d3 --- /dev/null +++ b/src/dataANDcalc/java/SortAlgori/ShellSort.java @@ -0,0 +1,64 @@ +package SortAlgori; + +public class ShellSort { + + private int[] arr; + + private int gap; + + public ShellSort(int[] arr){ + this.arr = arr; + this.gap = arr.length; + } + + private void sort(){ + while(true){ + // 每次步长为原来步长的一半,初始的步长为排序数组长度的一半 + gap = gap/2; + // 分组进行插入排序 + for (int i = gap; i =0 && temp < arr[index]){ + arr[index+gap] = arr[index]; + index -= gap; + } + //将当前数插入到下标+gap的位置 + arr[index+gap] = temp; + } + if (gap == 1){ + break; + } + } + } + + public void show(){ + for (int i = 0; i < arr.length; i++) { + System.out.print(arr[i] + " "); + } + System.out.println(); + } + + public static void main(String[] args) { + int[] arr = new int[50000]; + System.out.println("排序前的序列:"); + for(int i=0; i<50000; i++){ + arr[i] = (int)(Math.random()*100000); + System.out.print(arr[i] + " "); + } +// int[] arr = new int[]{8,9,1,7,2,3,5,4,6,0}; + System.out.println(); + ShellSort shellSort = new ShellSort(arr); + long startTime = System.currentTimeMillis(); + shellSort.sort(); + long endTime = System.currentTimeMillis(); + System.out.println("排序后的序列:"); + shellSort.show(); + System.out.println("排序所花费的时间:" + (endTime - startTime) + "ms"); + } + +}