选择排序,插入排序,快速排序的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;
    }
}
相关推荐
charlie1145141911 分钟前
从 0 开始:在 WSL + VSCode 上利用 Maven 构建 Java Spring Boot 工程
java·笔记·vscode·后端·学习·maven·springboot
前端小L3 分钟前
图论专题(十五):BFS的“状态升维”——带着“破壁锤”闯迷宫
数据结构·算法·深度优先·图论·宽度优先
tuokuac4 分钟前
Maven中的属性占位符的用法
java·maven
芒克芒克7 分钟前
Maven 项目管理从入门到进阶:基础与高级实战全解析
java·maven
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——连续数组
c++·算法·leetcode·结构与算法
憧憬blog3 小时前
【Kiro开发集训营】拒绝“屎山”堆积:在 Kiro 中重构“需求-代码”的血缘关系
java·开发语言·kiro
e***74953 小时前
Spring Security 官网文档学习
java·学习·spring
n***i954 小时前
Java NIO文件操作
java·开发语言·nio
星释4 小时前
Rust 练习册 72:多米诺骨牌与回溯算法
开发语言·算法·rust
笃行客从不躺平5 小时前
接口幂等性(Idempotency)
java