Java中的数组排序方式(快速排序、冒泡排序、选择排序)

下面是Java中的数组排序方式的完整攻略。

1. 快速排序

快速排序是常用的一种排序算法,其时间复杂度为O(nlogn)。其基本思想是选择一个基准数,将数组分成左右两部分,比基准数小的放在左边,比基准数大的放在右边,然后再对左右两部分分别递归地进行快速排序。

Java中快速排序的实现基于Arrays类的sort方法。下面是一个示例代码:

public static void quickSort(int[] arr, int left, int right) {
    if (left < right) {
        int partitionIndex = partition(arr, left, right); // 分割索引
        quickSort(arr, left, partitionIndex - 1);
        quickSort(arr, partitionIndex + 1, right);
    }
}

public static int partition(int[] arr, int left, int right) {
    int pivot = left; // 设定基准值(pivot)
    int index = pivot + 1;
    for (int i = index; i <= right; i++) {
        if (arr[i] < arr[pivot]) {
            swap(arr, i, index);
            index++;
        }
    }
    swap(arr, pivot, index - 1);
    return index - 1;
}

public static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

在以上示例代码中,quickSort方法递归调用了自身,算法的主要逻辑体现在partition方法中,该方法用于分割数组,找到基准数的正确位置,并将基准数与正确位置进行交换。swap方法用于交换数组中的两个元素。

下面是一个基于快速排序的示例代码:

public class QuickSortExample {
    public static void main(String[] args) {
        int[] arr = {5, 3, 8, 6, 2, 7, 1, 4};
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }

    public static void quickSort(int[] arr, int left, int right) {
        if (left < right) {
            int partitionIndex = partition(arr, left, right); // 分割索引
            quickSort(arr, left, partitionIndex - 1);
            quickSort(arr, partitionIndex + 1, right);
        }
    }

    public static int partition(int[] arr, int left, int right) {
        int pivot = left; // 设定基准值(pivot)
        int index = pivot + 1;
        for (int i = index; i <= right; i++) {
            if (arr[i] < arr[pivot]) {
                swap(arr, i, index);
                index++;
            }
        }
        swap(arr, pivot, index - 1);
        return index - 1;
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

输出结果为:[1, 2, 3, 4, 5, 6, 7, 8]。

2. 冒泡排序

冒泡排序的基本思想是将相邻的两个元素进行比较,如果前者大于后者,则交换位置,直到序列中所有元素都满足顺序要求为止。时间复杂度为O(n^2),因此在处理较长的序列时效率较低。

下面是一个示例代码:

public class BubbleSortExample {
    public static void main(String[] args) {
        int[] arr = {5, 3, 8, 6, 2, 7, 1, 4};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }

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

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

在以上示例代码中,bubbleSort方法中嵌套了两个循环,第一个循环控制比较的轮数,第二个循环控制每轮比较的次数。swap方法用于交换数组中的两个元素。

以上代码的输出结果为:[1, 2, 3, 4, 5, 6, 7, 8]。

3. 选择排序

选择排序的基本思想是每次找到最小的元素,并将其放在已排序的序列末尾。时间复杂度同样为O(n^2)。

下面是一个示例代码:

public class SelectSortExample {
    public static void main(String[] args) {
        int[] arr = {5, 3, 8, 6, 2, 7, 1, 4};
        selectSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void selectSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < n; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(arr, i, minIndex);
        }
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

在以上示例代码中,selectSort方法中嵌套了两个循环,第一个循环控制排序的轮数,第二个循环用于寻找最小元素的下标。swap方法用于交换数组中的两个元素。

以上代码的输出结果为:[1, 2, 3, 4, 5, 6, 7, 8]。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的数组排序方式(快速排序、冒泡排序、选择排序) - Python技术站

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

相关文章

  • Redis使用ZSET实现消息队列使用小结

    Redis使用ZSET实现消息队列使用小结 概述 Redis是一款功能强大的开源的In-Memory数据结构存储系统,除了支持key-value结构外,它还提供了List、Set、Hash和ZSet。其中ZSet是有序集合,它可以在插入元素时指定一个score值,可以根据score进行排序,也可以查看属于某个score范围内的元素。因此,ZSet也可以用来实…

    算法与数据结构 2023年5月19日
    00
  • JS排序之快速排序详解

    JS排序之快速排序详解 快速排序是一种高效的排序算法,它的核心思想是分治。快排的具体步骤如下: 选择一个基准元素,将序列中所有元素和这个基准元素进行比较,将比基准元素小的元素放入左侧序列,将比基准元素大的元素放入右侧序列。 递归地对左右两个子序列进行快速排序,直到每个子序列只有一个元素或者为空。 示例1:将序列[3,1,6,4,8,2,5,7]进行快速排序。…

    算法与数据结构 2023年5月19日
    00
  • C++实现合并排序的方法

    C++ 是一门功能强大的编程语言,提供了多种排序算法来满足不同场景的需要。其中,合并排序是一种常用的高效排序算法,下面我们就来介绍一下 C++ 实现合并排序的方法。 合并排序算法简介 合并排序算法是一种基于归并操作的排序算法,它的基本思想是将一个数组划分为两个子数组,递归地对这两个子数组分别进行排序,然后将排好序的两个子数组合并成一个有序的数组。该算法的时间…

    算法与数据结构 2023年5月19日
    00
  • asp下几种常用排序算法

    我将为您详细讲解ASP下几种常用排序算法的完整攻略。 一、排序算法简介 排序算法是计算机科学中非常基础的算法之一。它是将一组数据中的元素按照某种规则进行排序的过程。排序算法是计算机程序设计的基础,它涉及到数据结构、算法、模式识别等计算机科学领域内的基础理论。 排序算法主要分为以下几种: 冒泡排序 选择排序 插入排序 快速排序 归并排序 本文将针对ASP下几种…

    算法与数据结构 2023年5月19日
    00
  • C#实现优先队列和堆排序

    C#实现优先队列和堆排序攻略 什么是优先队列? 优先队列(Priority Queue)是在数据结构中使用频率很高的一种类型,它的主要特点是能够在数据插入时将数据进行优先级的排序。 并且每次取出数据时取的是优先级最高的数据。 通常情况下我们使用最大堆来实现优先队列。 最大堆是一种特殊的堆,它的特点是每个结点都大于等于它的子结点。 什么是堆排序? 堆排序是一种…

    算法与数据结构 2023年5月19日
    00
  • 7种排序算法的实现示例

    针对“7种排序算法的实现示例”的完整攻略,我会提供如下内容: 标题:7种排序算法的实现示例 这是一个一级标题,用于明确文章的主题。 简介:介绍7种排序算法的基本概念和使用场景 在这里我会简介7种排序算法的基本概念和使用场景,以帮助读者快速了解文章主题。 内容:讲解7种排序算法的实现示例 在这个章节,我会具体讲解7种排序算法的实现示例。其中,每种排序算法会按一…

    算法与数据结构 2023年5月19日
    00
  • c语言实现的几种常用排序算法

    C语言实现的几种常用排序算法 简介 排序是算法中最基本的任务之一,其目的是将一系列元素按照一定的顺序进行排列。在实际开发中,排序算法被广泛应用,如数据分析、数据库查找等场景。在C语言中,有多种常用的排序算法,本文将详细介绍几种排序算法的实现方法。 冒泡排序(Bubble Sort) 冒泡排序是一种基本的排序算法,其原理是通过多次比较和交换来实现排序。其实现过…

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

    JavaScript中的排序算法是基于不同的算法实现的,主要包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。下面我们会分别讲解这些算法的具体实现过程,其中包括每个算法的时间复杂度、空间复杂度、优缺点以及关键代码实现。 冒泡排序 冒泡排序是一种交换排序算法,其基本思想是重复地从序列中比较相邻的两个元素,一遍遍地交换相邻逆序的元素。在一趟排序中如果没有进…

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