一、介绍

二、思想

三、过程

四、代码(交换法)
package cn.qqqking.sort;
import java.util.Arrays;
/**
* @author AnQi
* @date 2020/4/18 12 04:00
* @description
*/
public class ShellSort {
public static void main(String[] args) {
int arr[] = {8,9,1,7,2,3,5,4,6,0};
shellSort(arr);
}
/**
* 逐步推导
*/
public static void shellSort(int arr[]){
int temp = 0;
int count =0;
for (int gap = arr.length/2; gap > 0 ; gap /= 2) {
count++;
for (int i = gap; i < arr.length; i++) {
//遍历各组中 所有的元素 一共gap组 每组个数据 步长gap
// i =5 j = 0
for (int j = i - gap; j >= 0; j-=gap) {
//如果当前元素 大于 +gap 后那个 需要交换
if(arr[j] > arr[j+gap]){
temp = arr[j];
arr[j] = arr[j+gap];
arr[j+gap] = temp;
}
}
}
System.out.println("第"+(count)+"轮");
System.out.println(Arrays.toString(arr));
}
}
}
/**
* 逐步推导
*/
//public static void shellSort(int arr[]){
//
// int temp = 0;
// /**
// * 希尔排序 第一轮
// * 将10个数据 分成 10/2 5组
// */
// for (int i = 5; i < arr.length; i++) {
// //遍历各组中 所有的元素 一共5组 每组2个数据 步长5
// // i =5 j = 0
// for (int j = i - 5; j >= 0; j-=5) {
// //如果当前元素 大于 +5 后那个 需要交换
// if(arr[j] > arr[j+5]){
// temp = arr[j];
// arr[j] = arr[j+5];
// arr[j+5] = temp;
// }
// }
//
// }
// System.out.println(Arrays.toString(arr));
//
//
//
//
//}
五、代码(移位法)
/**
* 逐步推导
* 移位法
*/
public static void shellSort2(int arr[]){
for (int gap = arr.length/2; gap > 0 ; gap /= 2) {
//从第gap个元素 逐个对其所在的组进行直接插入排序
for (int i = gap; i < arr.length; i++) {
int j = i;
int temp1 = arr[j];
if(arr[j]<arr[j-gap]){
while( j - gap >= 0 && temp1< arr[j-gap]){
//移动
arr[j]= arr[j-gap];
j -= gap;
}
//找到
arr[j] = temp1;
}
}
}
}
本文深入解析了希尔排序算法,包括其思想、实现过程及代码示例。通过交换法和移位法两种不同方式实现希尔排序,展示了算法的逐步推导过程,并提供了完整的Java代码实现。
898

被折叠的 条评论
为什么被折叠?



