Java实现希尔算法

it2024-03-11  75

(7)Java实现希尔算法

代码实现:

package com.wllarl.suanfa.sort; import java.util.Arrays; public class ShellSort { public static void main(String[] args) { ShellSort shellSort = new ShellSort(); int[] array = {9,4,3,2,5,7,1,8,0,6}; shellSort.shellSort2(array); System.out.println(Arrays.toString(array)); shellSort.shellJiaohuan(array); System.out.println(Arrays.toString(array)); shellSort.shellyiwei2(array); System.out.println(Arrays.toString(array)); } //交换法 public void shellSort(int[] arr){ int temp = 0; for (int grp = arr.length/2; grp > 0; grp/=2 ){ for (int j = grp; j < arr.length; j++){ for (int i = j-grp; i >= 0; i -= grp){ if (arr[i] > arr[i+grp]){ temp = arr[i]; arr[i] = arr[i+grp]; arr[i+grp] = temp; } } } } } //交换法 public void shellJiaohuan(int[] arr){ int temp = 0; for (int grp = arr.length/2; grp > 0;grp/=2){ for (int i = grp; i < arr.length; i++){ for (int j = i - grp; j >= 0 ; j -= grp){ if (arr[j]>arr[j+grp]){ temp = arr[j+grp]; arr[j+grp] = arr[j]; arr[j] = temp; } } } } } //移位法 public void shellSort2(int[] arr){ for (int grp = arr.length/2; grp > 0; grp/=2 ){ for (int j = grp; j < arr.length; j++){ int i = j; int temp = arr[i]; if (temp < arr[i-grp]){ while (i-grp >= 0 && temp < arr[i-grp] ){ arr[i] = arr[i-grp]; i = i-grp; } arr[i] = temp; } } } } public void shellyiwei2(int[] arr){ for (int grp = arr.length/2; grp > 0; grp/=2 ){ for (int j = grp; j < arr.length; j++){ int i = j; int temp = arr[i]; if (arr[i]<arr[i-grp]){ while (i-grp >= 0 && arr[i] < arr[i-grp]){ arr[i] = arr[i-grp]; i -= grp; } arr[i] = temp; } } } } }

实验结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

最新回复(0)