(7)Java实现希尔算法
代码实现:
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]