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

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

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

相关推荐
ianozo24 分钟前
数据结构--【栈与队列】笔记
数据结构·笔记
---yx89897832 分钟前
数字人系统源码---v10技术五大底层架构链路全局开发思路
算法·架构·数字人·数字人源码·数字人系统
xiao--xin39 分钟前
LeetCode100之二叉搜索树中第K小的元素(230)--Java
java·算法·leetcode·二叉树·树的统一迭代法
路飞雪吖~41 分钟前
数据结构 && 常见的排序算法
数据结构·算法·排序算法
手握风云-1 小时前
Java数据结构第二十一期:解构排序算法的艺术与科学(三)
数据结构·算法·排序算法
爱吃柠檬呀1 小时前
《C陷阱与缺陷》读书笔记(一)
c语言·开发语言·算法·《c陷阱与缺陷》·编写程序
壮志凌云1 小时前
配对样本t检验
算法
陈果然DeepVersion2 小时前
算法奈我何(一)选择排序
排序算法
wxr的理想之路2 小时前
list链表的使用
c语言·数据结构·链表·list
fqsword2 小时前
C++ 算法竞赛STL以及常见模板
c++·算法