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

yizhihongxing

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日

相关文章

  • JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例

    非常感谢你对于本站文章的关注。下面是针对文章“JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例”的完整攻略解析。 1. 介绍 本文主要讲解的是一种常用于解决路径搜索问题的算法—— A*寻路算法。使用该算法可以在搜索空间(如地图、游戏场景等)中找到一条最优路径,可应用于许多领域,如自动驾驶、游戏AI等。 2. 算法流程 该算法通过在搜索空间中创…

    算法与数据结构 2023年5月19日
    00
  • C语言完整实现12种排序算法(小结)

    C语言完整实现12种排序算法(小结) 本文主要介绍了C语言实现12种排序算法的详细过程以及相关示例。 排序算法的分类 排序算法可分为内部排序和外部排序。内部排序是指将待排序的数据全部加载到内存中进行排序,而外部排序是指在数据量过大时需要将数据分块,对每一块数据进行排序,最后将各个块合并起来,得到有序的结果。 在内部排序中,常用的排序算法大致可分为以下几类: …

    算法与数据结构 2023年5月19日
    00
  • C++实现自顶向下的归并排序算法

    下面是“C++实现自顶向下的归并排序算法”的完整攻略。 归并排序的概念 归并排序是一种分治法排序算法,它将一个大数组分成两个部分,分别对这两个部分进行排序,最后将两个排好序的部分合并起来。归并排序的时间复杂度为O(n log n)。 归并排序的步骤 实现归并排序需要以下三个步骤: 分割 – 将数组分成两个部分,分别对每个部分进行排序。该过程使用二分法来实现。…

    算法与数据结构 2023年5月19日
    00
  • 2019年京东前端工程师面试题(附答案)

    本次将会以京东前端工程师面试题为例,详细讲解如何准备和应对前端岗面试。 第一步:了解面试整体流程和考察的技能点 在准备面试前,需要先了解面试的整体流程和所考察的技能点,从而根据需要和缺点来进行有针对性的准备。 面试的整体流程一般包括: 自我介绍和岗位广告 聊聊项目和技术栈 问题解答和技术评测 算法/编码能力测试 HR面试 而在前端工程师的岗位面试中,考察的技…

    算法与数据结构 2023年5月19日
    00
  • JS中多层次排序算法的实现代码

    让我为你介绍一份JS中多层次排序算法的实现代码攻略。 简介 多层次排序是指一个列表需要依据不同的规则进行排序,例如按照价格、销量、评分等进行排序。在JS中,我们可以通过自定义排序函数实现多层次排序。 实现 以下是实现多层次排序的示例代码: const products = [ { name: ‘iPhone 11’, price: 799, sales: 1…

    算法与数据结构 2023年5月19日
    00
  • TypeScript调整数组元素顺序算法

    下面是详细的攻略: TypeScript调整数组元素顺序算法 在 TypeScript 中实现调整数组元素顺序的算法需要使用到以下两种方法: 方法一:splice() array.splice(startIndex, toRemove, …itemsToAdd) splice() 方法可以实现对数组中指定起始索引 startIndex 开始的若干元素的删…

    算法与数据结构 2023年5月19日
    00
  • JS常见面试试题总结【去重、遍历、闭包、继承等】

    来讲解一下“JS常见面试试题总结【去重、遍历、闭包、继承等】”的完整攻略。 一、去重 JS中去重的方法有很多种,我这里介绍两种比较常见的方法。 1.1 利用Set去重 let arr = [1, 2, 3, 1, 2, 3]; let unique = […new Set(arr)]; console.log(unique); // [1, 2, 3] …

    算法与数据结构 2023年5月19日
    00
  • javascript基本常用排序算法解析

    让我来为您详细讲解“JavaScript基本常用排序算法解析”的完整攻略。 一、前言 排序算法是计算机科学中最常用的算法之一。它可以将我们需要排序的数据快速进行排序,加速我们的代码算法运行速度。在本篇文章中,我们将给您介绍一些基本的、常用的排序算法。 二、常用排序算法 冒泡排序 冒泡排序是一种比较简单但实用的排序算法,也是最基本的排序算法之一。它的基本思想是…

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