用java写一个希尔排序
时间: 2024-03-09 13:20:41 浏览: 26
```
public class ShellSort {
public static void main(String[] args) {
int[] arr = { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
int n = arr.length;
System.out.println("排序前:");
printArray(arr);
shellSort(arr, n);
System.out.println("排序后:");
printArray(arr);
}
public static void shellSort(int[] arr, int n) {
int gap = n / 2;
while (gap > 0) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
gap /= 2;
}
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
```
希尔排序的基本思想是将待排序的数组分成若干个子序列,然后对每个子序列进行插入排序,这样可以使子序列基本有序,最后再对整个数组进行插入排序。希尔排序的关键在于选择合适的间隔序列。一般来说,初始间隔可以取数组长度的一半,然后每次缩小一半,直到间隔为1。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)