Java数据结构之常见排序算法(上)

Java数据结构之常见排序算法(上)

本篇文章将介绍常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。这些排序算法既是学习算法和数据结构的入门知识,也是在实际工作中常用的基础算法。

冒泡排序

冒泡排序是一种简单的排序算法,它的基本思想是从前往后依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换它们的位置,重复这个过程,每一轮比较都能找出一个最大的元素,直到所有的元素都排好序为止。

Java实现:

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

示例:

int [] arr = {34, 23, 67, 12, 89, 52, 71};
bubbleSort(arr);
System.out.println(Arrays.toString(arr)); // [12, 23, 34, 52, 67, 71, 89]

选择排序

选择排序是一种简单但不稳定的排序算法,它的基本思想是:每一轮选出未排序数组中的最小值,将它放到数组的开头,下一轮从剩下的数组中继续选择最小值,并放到已排序数组的末尾。

Java实现:

public static void selectionSort(int[] arr) {
    int len = arr.length;
    for (int i = 0; i < len - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

示例:

int [] arr = {34, 23, 67, 12, 89, 52, 71};
selectionSort(arr);
System.out.println(Arrays.toString(arr)); // [12, 23, 34, 52, 67, 71, 89]

插入排序

插入排序是一种稳定但效率不高的排序算法,它的基本思想是将未排序的元素插入到已排序的数组中,先将第一个元素看作已排序数组,第二个元素插入到它的正确位置上,第三个元素插入到前两个元素的正确位置上,以此类推。

Java实现:

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

示例:

int [] arr = {34, 23, 67, 12, 89, 52, 71};
insertionSort(arr);
System.out.println(Arrays.toString(arr)); // [12, 23, 34, 52, 67, 71, 89]

总结

以上就是常见的排序算法,每种算法都有其优劣和适用场景,读者可以根据需要选择合适的算法。

本文介绍的排序算法中,冒泡排序、选择排序和插入排序的时间复杂度都是O(n^2),不适合对大规模数据进行排序,而快速排序和归并排序的时间复杂度都是O(nlogn),适合对大规模数据进行排序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java数据结构之常见排序算法(上) - Python技术站

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

相关文章

  • Java链表数据结构及其简单使用方法解析

    Java链表数据结构及其简单使用方法解析 概述 链表是一种非线性结构,由一系列节点按照顺序连接而成。每个节点由数据域和指针域组成,数据域用于存储数据,指针域用于指向下一个节点或者上一个节点。在Java中,链表有多种实现方式,常见的有单向链表、双向链表等。 单向链表的实现 以下是一个单向链表的实现代码示例: public class Node { privat…

    数据结构 2023年5月17日
    00
  • Java数据结构与算法之栈(动力节点Java学院整理)

    Java数据结构与算法之栈攻略 什么是栈? 栈是一种线性结构,属于“先进后出”(Last In First Out,LIFO)的数据结构。它只允许在栈顶进行插入和删除操作。 栈的实现 栈的实现有两种方式: 基于数组实现的顺序栈(ArrayStack) 基于链表实现的链式栈(LinkedStack) 1. 基于数组实现的顺序栈 顺序栈的实现需要一个固定大小的数…

    数据结构 2023年5月17日
    00
  • Java 数据结构线性表之顺序存储详解原理

    Java 数据结构线性表之顺序存储详解原理 一、什么是线性表 线性表(Linear List)指的是同一类数据元素的集合,而且这些元素之间是有序的。线性表具有两个显著的特点:第一,有且仅有一个被称为“第一个”的数据元素;第二,有且仅有一个被称为“最后一个”的数据元素;此外,除第一个和最后一个数据元素外,其它数据元素均有且仅有一个直接前驱和一个直接后继。 二、…

    数据结构 2023年5月17日
    00
  • Golang Mutex互斥锁源码分析

    Golang Mutex互斥锁源码分析 介绍 Golang的Mutex互斥锁机制是一种非常重要的并发控制方式,它可以保证在同一时刻,同一共享资源只能被一个goroutine访问,其他的goroutine必须等待当前访问者释放锁之后才能访问该共享资源。 在使用Mutex机制时,需要进行锁定、解锁等操作,而这一过程是由Mutex的底层实现——sync包来完成的。…

    数据结构 2023年5月17日
    00
  • C语言数据结构与算法之图的遍历(一)

    我来给您详细讲解一下“C语言数据结构与算法之图的遍历(一)”的完整攻略。 简介 本篇攻略主要介绍了图的遍历问题。图是由若干个点和连接这些点的边构成的数据结构,常用来表示复杂的关系和网络。图的遍历就是从图的某一点开始,按照一定的规则沿着边逐个访问图中所有的点,不重不漏地遍历整个图。 在本篇攻略中,我们将探讨图的深度优先遍历(DFS)和广度优先遍历(BFS)两种…

    数据结构 2023年5月17日
    00
  • Java数据结构之链表详解

    Java数据结构之链表详解 什么是链表? 链表是一种基本的动态数据结构,它的基本思想是利用指针将一些零散的内存块串联起来,形成一个逻辑上的整体。链表由一些称为节点的元素组成,每个节点保存两个部分:数据和指向下一个节点的指针。相比于数组这种静态数据结构,链表具有动态性,我们可以通过动态的增加或删除节点来改变链表的大小。 链表的分类 单向链表:每个节点只有一个指…

    数据结构 2023年5月17日
    00
  • java数据结构之树基本概念解析及代码示例

    Java数据结构之树基本概念解析及代码示例 树的基本概念 树(Tree)是一种非常重要的数据结构,它以“分支和层次”为特点,常用于组织数据,如目录结构、文件系统、网络结构等。 树是由节点(Node)构成的集合,其中有一个节点为根(Root),其他节点被称为子节点。每个节点都有一个父节点,除根节点外,每个节点可以有多个子节点。节点之间的关系称为边(Edge)。…

    数据结构 2023年5月16日
    00
  • AtCoder Beginner Contest 299

    A – Treasure Chest (abc299 a) 题目大意 给定一个包含 |*.的字符串,其中|两个,*一个,问*是否在两个|之间。 解题思路 找到两个|的下标\(l, r\)以及 *的下标\(mid\),看看是否满足 \(l < mid < r\)即可。 神奇的代码 #include <bits/stdc++.h> usi…

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