数据结构与算法:选择排序与快速排序

在Java中实现选择排序和快速排序,可以遵循与Python中相同的算法逻辑。以下是两种排序算法的Java实现代码:

选择排序(Selection Sort)

java 复制代码
public class SelectionSort {
    public static void selectionSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            // 交换找到的最小值和当前位置的值
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
    }

    public static void main(String[] args) {
        int[] arr = {64, 25, 12, 22, 11};
        selectionSort(arr);
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

快速排序(Quick Sort)

java 复制代码
public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(arr, low, high);
            quickSort(arr, low, pivotIndex - 1);
            quickSort(arr, pivotIndex + 1, high);
        }
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high]; // 选择最右边的元素作为基准值
        int i = low - 1; // 指向最小元素的指针

        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                // 交换元素
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }

        // 将基准值放到正确的位置
        int temp = arr[i + 1];
        arr[i + 1] = arr[high];
        arr[high] = temp;

        return i + 1;
    }

    public static void main(String[] args) {
        int[] arr = {10, 7, 8, 9, 1, 5};
        quickSort(arr, 0, arr.length - 1);
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

在这两个示例中,selectionSort 方法实现了选择排序,而 quickSort 方法实现了快速排序。选择排序通过遍历未排序部分来找到最小(或最大)的元素,并将其与当前位置的元素交换。快速排序则使用一个基准值来将数组分为两部分,然后递归地对这两部分进行排序。

注意:在实际应用中,快速排序的实现可能会包含额外的优化,比如三数取中法来选择基准值,或者在数组长度较小时切换到插入排序等。这些优化可以提高快速排序的性能,特别是在处理部分已排序或包含大量重复元素的数组时。

相关推荐
信奥卷王6 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵6 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG8 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
码完就睡8 小时前
数据结构——红黑树
数据结构
码爸8 小时前
数据结构详细介绍
数据结构
Navigator_Z8 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛9 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记9 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
浮链序9 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm