java冒泡排序和选择排序详解

Java冒泡排序和选择排序详解

冒泡排序

冒泡排序是最简单的排序算法之一,也是入门学习排序算法的基础。该算法的主要思路是从最后一个元素开始,与前面一个元素比较并交换,直到最终将最小元素移动到第一个位置。

  1. 冒泡排序实现原理

冒泡排序算法每一轮比较都会将相邻元素中较大或较小的一个元素“冒泡”到待排序序列的最后一个位置。类似于鸡尾酒中的冒泡,所以也叫做“鸡尾酒排序”。

  1. 算法伪代码
冒泡排序

foreach i in n-1..1
    foreach j in 0..i-1
        if arr[j] > arr[j+1]
            swap arr[j] and arr[j+1]

3.示例说明

以数组{4, 3, 5, 1, 2}为例,我们通过冒泡排序来将数组中的元素按照从小到大的顺序排列。

首先,我们比较 34,由于 34 小,因此将它们交换位置,数组变为 {3, 4, 5, 1, 2}

接着,比较 45,由于它们已经是有序的,所以不需要交换。

接下来是 51 的比较,由于 15 小,因此将它们交换位置,数组变为 {3, 4, 1, 5, 2}

再比较 52,由于 25 小,因此将它们交换位置,数组变为 {3, 4, 1, 2, 5}

现在得到了序列中的最小值 2,然后重复以上过程,不断地将最小元素移动到第一个位置。

在第一次比较中,我们需要比较4次,如果n为数组长度,那么我们需要进行n -1轮比较。

选择排序

选择排序是一种简单但效率较低的排序算法。它的主要思路是在未排序的序列中找到最小或最大的元素,然后将其放到排序序列的起始位置,直到排序完毕。

  1. 选择排序实现原理

选择排序算法每一轮都会在未排序区间中找到最小(或最大)的元素,然后将其交换放到当前未排序序列的起始位置,这样就完成了一次排序。

  1. 算法伪代码
选择排序

foreach i in 0..n-2
    min_index = i
    foreach j in i+1..n-1
        if arr[j] < arr[min_index]
            min_index = j
    if min_index != i
        swap arr[i] and arr[min_index]
  1. 示例说明

以数组{4, 3, 5, 1, 2}为例,我们通过选择排序来将数组中的元素按从小到大的顺序排列。

首先,我们将当前的最小值设置为数组第一个元素,即 4,然后在数组的剩余元素 {3, 5, 1, 2} 中找到最小元素 1,并与当前最小元素 4 交换位置,得到 {1, 5, 3, 4, 2}

然后,在 {5, 3, 4, 2} 中找到最小值 2,并与当前最小元素 1交换位置,得到 {1, 2, 4, 3, 5}

接下来是 {4, 3, 5}中的最小元素 3,与4交换位置,得到 {1, 2, 3, 4, 5}

最后,进行最后一轮比较,得到有序数组{1, 2, 3, 4, 5}

选择排序的时间复杂度为 $O(n^2)$,与冒泡排序相同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java冒泡排序和选择排序详解 - Python技术站

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

相关文章

  • PHP实现常见排序算法的示例代码

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

    算法与数据结构 2023年5月19日
    00
  • Javascript实现快速排序(Quicksort)的算法详解

    Javascript实现快速排序的算法详解 在这个攻略中,我们将通过Javascript实现快速排序算法,并讲解算法的详细过程。 快速排序的基本思想 快速排序是一种基于交换的排序算法,其基本思想是通过选择一个基准元素,在一趟排序过程中,将之前需要排序的序列中的元素分割成两个部分,其中,左边部分元素的值都小于基准元素的值,右边部分元素的值都大于基准元素的值,然…

    算法与数据结构 2023年5月19日
    00
  • java实现对map的字典序排序操作示例

    下面是Java实现对Map的字典序排序操作的完整攻略: 1. 根据键(Key)排序 1.1 实现方式一 Map<String, String> map = new HashMap<>(); map.put("b", "2"); map.put("c", "3&quo…

    算法与数据结构 2023年5月19日
    00
  • 手把手教你搞懂冒泡排序和选择排序

    手把手教你搞懂冒泡排序和选择排序 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的数据为止。 算法流程 比较相邻的元素。如果当前的元素大于下一个元素,则交换它们的位置。 对每一对相邻元素都执行步骤 1,从开始第一对到…

    算法与数据结构 2023年5月19日
    00
  • js实现简单排列组合的方法

    下面是详细讲解 “js实现简单排列组合的方法” 的攻略。 排列组合的概念 排列就是由给定的n个元素中取出m(m ≤ n)个元素的所有排列总数的不同的排列数,用A(n, m)表示。例如,有3个元素A、B、C,则它们的排列有:ABC、ACB、BAC、BCA、CAB、CBA,共6种排列。 组合是指从n个不同元素中,取出m(m≤n)个元素的所有组合情况,用C(n,m…

    算法与数据结构 2023年5月19日
    00
  • JavaScript中的冒泡排序法

    JavaScript中的冒泡排序法 冒泡排序法就是通过比较任意两个相邻的元素,然后循环遍历整个数组,逐步将最大(或最小)的数移到最后一位。当没有相邻的元素需要互换位置的时候即可完成排序。冒泡排序法是常用的简单排序算法,虽然时间复杂度比高级算法如快速排序、堆排序等要高,但是对于小的数据集合,其性能表现要好于其他排序算法。 以下是冒泡排序法的具体实现: func…

    算法与数据结构 2023年5月19日
    00
  • C语言中的结构体快排算法

    C语言中的结构体快排算法 在C语言中,复杂的数据类型可以通过结构体定义。结构体是一种自定义类型,可以由不同类型的变量组成。快速排序算法是一种高效的排序算法,通过十分巧妙的算法思想,可以在平均$O(nlogn)$的时间复杂度内完成数组的排序。对于结构体类型的排序,在快速排序算法中也可以使用。本文主要讲解如何在C语言中使用结构体进行快排排序。 快速排序算法 快速…

    算法与数据结构 2023年5月19日
    00
  • C++递归实现选择排序算法

    实现选择排序算法的递归版本,步骤如下: 步骤1:找到最小值 首先,在要排序的数组中找到最小值,这个过程可以用for循环来实现。具体实现如下: // 找到数组中最小值的下标 int findMinIndex(int arr[], int startIndex, int endIndex) { int minIndex = startIndex; for (in…

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