选择排序,插入排序,快速排序的java简单实现

代码功能

以下Java代码包含了三个排序算法的实现:

选择排序(Selection Sort):通过不断选择剩余元素中的最小值来排序数组。

插入排序(Insertion Sort):通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

快速排序(Quick Sort):使用分治法,通过一个基准值将数据分为两部分,对每部分递归排序。

代码还包含了一个生成30个随机整数的数组的函数,并使用上述三种排序算法对数组进行排序,同时计算并输出每种排序方法的执行时间。

代码

java 复制代码
import java.util.Arrays;
import java.util.Random;

public class SortTest {
    public static void main(String[] args) {
        int[] array = generateRandomArray(30);
        System.out.println("Original array: " + Arrays.toString(array));

        long startTime, endTime;

        // 选择排序
        startTime = System.nanoTime();
        int[] sortedArraySelection = selectionSort(array.clone());
        endTime = System.nanoTime();
        System.out.println("Sorted by selection sort: " + Arrays.toString(sortedArraySelection));
        System.out.println("Time taken by selection sort: " + (endTime - startTime) + " ns");

        // 插入排序
        startTime = System.nanoTime();
        int[] sortedArrayInsertion = insertionSort(array.clone());
        endTime = System.nanoTime();
        System.out.println("Sorted by insertion sort: " + Arrays.toString(sortedArrayInsertion));
        System.out.println("Time taken by insertion sort: " + (endTime - startTime) + " ns");

        // 快速排序
        startTime = System.nanoTime();
        int[] sortedArrayQuick = quickSort(array.clone(), 0, array.length - 1);
        endTime = System.nanoTime();
        System.out.println("Sorted by quick sort: " + Arrays.toString(sortedArrayQuick));
        System.out.println("Time taken by quick sort: " + (endTime - startTime) + " ns");
    }

    public static int[] generateRandomArray(int size) {
        Random random = new Random();
        int[] array = new int[size];
        for (int i = 0; i < size; i++) {
            array[i] = random.nextInt(1000);
        }
        return array;
    }

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

    public static int[] insertionSort(int[] array) {
        for (int i = 1; i < array.length; i++) {
            int key = array[i];
            int j = i - 1;
            while (j >= 0 && array[j] > key) {
                array[j + 1] = array[j];
                j--;
            }
            array[j + 1] = key;
        }
        return array;
    }

    public static int[] quickSort(int[] array, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(array, low, high);
            quickSort(array, low, pivotIndex - 1);
            quickSort(array, pivotIndex + 1, high);
        }
        return array;
    }

    public static int partition(int[] array, int low, int high) {
        int pivot = array[high];
        int i = (low - 1);
        for (int j = low; j < high; j++) {
            if (array[j] < pivot) {
                i++;
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
        int temp = array[i + 1];
        array[i + 1] = array[high];
        array[high] = temp;
        return i + 1;
    }
}
相关推荐
架构源启6 小时前
文档接入与智能解析:基于 Spring AI 1.1.x 的多格式解析、版面理解与结构化抽取
java·人工智能·spring
可编程芯片开发8 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
罗西的思考9 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging
人工智能·算法·机器学习
Mr.HeBoYan10 小时前
一次持续三天才出现的丢包故障——深入解析 DPDK Memory Ordering、rte_ring 与 CPU Memory Barrier (下)
linux·网络·算法·架构·dpdk
大模型码小白10 小时前
JAVA 集合框架进阶:List 与 Set 的深度解析与实战
java·开发语言·人工智能·windows·语言模型·list·ai编程
wabs66610 小时前
关于图论【深度优先搜索的理论基础】
算法·深度优先·图论
名字还没想好☜11 小时前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
先吃饱再说11 小时前
LeetCode 101. 对称二叉树
算法
音符犹如代码11 小时前
后端视角看 EventBus:发布订阅总线的原理、场景与用法
java·spring boot·guava
前端炒粉11 小时前
手撕小汇总
java·前端·javascript