希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。,- package cn.itcase;
- import java.util.Arrays;//导包
- public class SortTest {//测试类
- public static void main(String[] args) {
- int[] arr = { 2, 5, 3, 1, 4 };//定义字符串
- System.out.println("排序前:" +Arrays.toString(arr));
- ShellSort.sort(arr);
- System.out.println("排序后:" + Arrays.toString(arr));
- }
- /*
- * 交换数组中的两个元素
- */
- public static void swap(int[] data, int i, int j) {
- int temp = data[i];
- data[i] = data[j];
- data[j] = temp;
- }
- }
- class ShellSort {//定义自定义类
- public static void sort(int[] data) {
- for (int i = data.length / 2; i > 2; i /= 2) {
- for (int j = 0; j < i; j++) {
- insertSort(data, j, i);
- }
- }
- insertSort(data, 0, 1);
- }
- /**
- * @param data
- * @param j
- * @param i
- */
- private static void insertSort(int[] data, int start, int inc) {
- for (int i = start + inc; i < data.length; i += inc) {//循环
- for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc) {//循环判断
- SortTest.swap(data, j, j - inc);
- }
- }
- }
- }
复制代码 |