Java 直接插入排序的三种实现

Java 直接插入排序的三种实现

本文将介绍 Java 中直接插入排序的三种实现方式,分别为插入排序、希尔排序和折半插入排序。

插入排序

插入排序是一种简单直观的排序算法,其基本思想是将一个待排序的元素插入到已排好序列中的适当位置。

以下是 Java 中插入排序的实现代码:

public static void insertSort(int[] arr) {
    for (int i = 1; i < arr.length; i++) {
        int temp = arr[i];
        int j = i;
        while (j > 0 && arr[j-1] > temp) {
            arr[j] = arr[j-1];
            j--;
        }
        arr[j] = temp;
    }
}

上述实现中,使用一个外层循环遍历待排序数组,从第二个元素开始到最后一个元素。在内层循环中以正确的顺序将当前元素插入到已排好序的序列中。

以下是一个使用插入排序的示例:

int[] arr = {5, 3, 8, 6, 4};
insertSort(arr);
System.out.println(Arrays.toString(arr));

输出结果为:

[3, 4, 5, 6, 8]

希尔排序

希尔排序是一种基于插入排序的优化算法,它通过将待排序数组分成若干个子序列进行插入排序来加快排序速度。

以下是 Java 中希尔排序的实现代码:

public static void shellSort(int[] arr) {
    int gap = arr.length / 2;
    while (gap > 0) {
        for (int i = gap; i < arr.length; 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 /= 2;
    }
}

上述实现中,首先定义希尔增量 gap 为数组长度的一半,然后在外层循环中不断将 gap 减半,内层循环采用插入排序的方式对每个子序列进行排序。

以下是一个使用希尔排序的示例:

int[] arr = {5, 3, 8, 6, 4};
shellSort(arr);
System.out.println(Arrays.toString(arr));

输出结果为:

[3, 4, 5, 6, 8]

折半插入排序

折半插入排序是一种对插入排序的优化算法,它通过将查找插入位置的线性搜索改为二分查找的方式来减少比较次数。

以下是 Java 中折半插入排序的实现代码:

public static void binaryInsertSort(int[] arr) {
    for (int i = 1; i < arr.length; i++) {
        int temp = arr[i];
        int left = 0;
        int right = i-1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] > temp) {
                right = mid-1;
            } else {
                left = mid+1;
            }
        }
        for (int j = i-1; j >= left; j--) {
            arr[j+1] = arr[j];
        }
        arr[left] = temp;
    }
}

上述实现中,在内层循环中使用折半查找的方式找到待插入元素的位置。这里使用一个 left 指针指向待插入的位置,然后将 left 右侧的元素向右移动一位,最后将待插入元素插入到 left 的位置上。

以下是一个使用折半插入排序的示例:

int[] arr = {5, 3, 8, 6, 4};
binaryInsertSort(arr);
System.out.println(Arrays.toString(arr));

输出结果为:

[3, 4, 5, 6, 8]

总结

本文介绍了 Java 中直接插入排序的三种实现方式,分别为插入排序、希尔排序和折半插入排序。不同的实现方式有着不同的优缺点,选择适合自己的算法是提高排序性能的重要步骤。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 直接插入排序的三种实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • MS-office计算机二级选择题大全

    MS-office计算机二级选择题大全攻略 为了帮助读者顺利通过MS-office计算机二级考试,我整理了以下的攻略: 1. 熟悉考试内容 首先要熟悉考试的内容,明确各个模块的考试重点,掌握考试的基本知识点和技巧,不仅能够提高备考效率,也能在考试时更加得心应手。 2. 做足练习 除了熟悉考试内容之外,还需要通过做题来掌握一些技巧和方法。需要多做相关题目和模拟…

    算法与数据结构 2023年5月19日
    00
  • Java冒泡排序(Bubble Sort)实例讲解

    下面我将为你详细讲解“Java冒泡排序(Bubble Sort)实例讲解”的完整攻略。 1. 冒泡排序简介 冒泡排序(Bubble Sort)是一种简单且常见的排序算法。它通过重复地遍历待排序数组,每次遍历将两个相邻的元素进行比较,如果它们的顺序错误就交换它们的位置,直到没有需要交换的元素为止。 2. 冒泡排序Java实现 下面是一个Java实现冒泡排序的示…

    算法与数据结构 2023年5月19日
    00
  • 用C语言实现二分查找算法

    当实现查找某个元素时,一个常见的算法是二分查找(Binary Search),也称作折半查找。二分查找是一种在有序数组中查找某一特定元素的搜索算法,将目标值与数组的中间元素进行比较,如果中间元素大于目标值,则在左半部分继续查找;如果中间元素小于目标值,则在右半部分继续查找。重复以上步骤,直到找到目标值或者确定目标值不存在。 以下是在C语言中实现二分查找的完整…

    算法与数据结构 2023年5月19日
    00
  • python计数排序和基数排序算法实例

    Python计数排序和基数排序算法实例攻略 计数排序和基数排序是排序算法中比较高效的一类算法,适用于整数排序,具有时间复杂度O(n+k)的优秀特性。本文将为大家详细讲解Python中计数排序和基数排序算法实现的完整攻略。 1. 计数排序算法实现 计数排序的核心思想是统计每个数在序列中出现的次数,然后通过累加计算出每个数所在的位置。具体实现步骤如下: 找到序列…

    算法与数据结构 2023年5月19日
    00
  • PHP大转盘中奖概率算法实例

    下面是一份完整的攻略,讲解如何实现一个PHP大转盘中奖概率算法: 问题描述 如何实现一个PHP大转盘中奖概率算法?也即,在一个转盘上设置几个奖项,每个奖项有对应的中奖概率,随机抽取中奖项并输出对应的奖品。 思路分析 为了实现大转盘的中奖概率算法,需要从以下几个方面入手: 定义奖项:确定奖品数量和对应的中奖概率 生成随机数:使用PHP的rand()函数生成随机…

    算法与数据结构 2023年5月19日
    00
  • PHP实现常见排序算法的示例代码

    让我来为你详细讲解“PHP实现常见排序算法的示例代码”的完整攻略。 什么是排序算法 排序算法是计算机科学中的基础算法之一,它将一组对象按照特定的顺序排列。排序算法一般都是以数字为例子,但是排序算法同样适用于字符串、日期、结构体等各种类型的数据。 常见的排序算法 常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这里我们将为大家介绍冒泡排序…

    算法与数据结构 2023年5月19日
    00
  • C/C++实现八大排序算法汇总

    C/C++实现八大排序算法汇总 简介 本文旨在介绍常用的八大排序算法并用 C/C++ 语言实现。 八大排序算法包括: 冒泡排序(Bubble Sort) 插入排序(Insertion Sort) 选择排序(Selection Sort) 快速排序(Quick Sort) 归并排序(Merge Sort) 希尔排序(Shell Sort) 堆排序(Heap S…

    算法与数据结构 2023年5月19日
    00
  • JS实现的排列组合算法示例

    下面我将详细讲解一下JS实现的排列组合算法示例的完整攻略。 算法原理 JS实现的排列组合算法主要基于数学组合学,其核心思想是将需要进行排列组合的数据按照一定规则进行排列组合,得到所有可能的排列组合方式。这里我们首先介绍排列与组合的概念: 排列:从n个不同元素中取出m个元素进行排列,按照一定的顺序排列的所有可能的情况被称为排列。其中,n>m。 组合:从n…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部