📜  ShellSort的Java程序(1)

📅  最后修改于: 2023-12-03 15:34:58.264000             🧑  作者: Mango

ShellSort的Java程序

ShellSort是一种排序算法,它是插入排序的一种改进版。它通过将待排序元素分组,对每组应用插入排序,不断减小组的数量直到最后一组,最后应用一次插入排序完成排序。

算法复杂度

ShellSort的时间复杂度最好情况下为O(n log n),最坏情况下为O(n2)。空间复杂度为O(1)。

Java程序

下面是使用Java实现的ShellSort算法程序:

public class ShellSort {
    public static void sort(int[] arr) {
        int n = arr.length;

        //初始化gap为数组长度的一半
        int gap = n / 2;

        //持续缩小gap直到为1
        while (gap > 0) {
            //对每个分组进行插入排序
            for (int i = gap; i < n; i++) {
                int temp = arr[i];
                int j = i;
                //对每个分组的元素进行插入排序
                while (j >= gap && arr[j - gap] > temp) {
                    arr[j] = arr[j - gap];
                    j -= gap;
                }
                arr[j] = temp;
            }
            //缩小gap
            gap /= 2;
        }
    }

    public static void main(String[] args) {
        int[] arr = {64, 25, 12, 22, 11};
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

解释

  • sort()方法接收一个待排序的整数数组。
  • n变量记录数组的长度。
  • gap变量初始化为数组长度的一半,并且在后续过程中不断缩小。
  • while循环不断缩小gap直到为1。
  • for循环对每个分组进行插入排序,将分组分为若干个元素的序列。
  • 插入排序将序列中的每个元素插入到前面已排好序的子序列中。
  • 内部while循环对每个分组中的元素进行插入排序。
  • arr[j - gap] > temp比较前一个元素是否大于后一个元素。
  • gap /= 2缩小gap。
  • main()方法用于演示ShellSort算法的应用。
  • System.out.println()用于打印排序后的数组。
总结

ShellSort是一种比较高效的排序算法,它通过不断缩小分组大小来减少插入排序的时间复杂度。ShellSort是插入排序算法的一种改进,它在性能上有很大的提升,因此在实际开发中得到了广泛应用。