选择排序,插入排序,快速排序的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;
    }
}
相关推荐
xiaoqiMikko23 分钟前
一条 CVSS 9.0 的 RCE,advisory 里没写修复版是哪个 —— fastjson 16723 的字段考古
java·安全
程序员贺加贝30 分钟前
一次 SaaS ERP 主数据生命周期设计:Policy、PreCheck 与结构化阻断原因
java·后端·架构·saas
AI情绪识别开源43 分钟前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang
catino1 小时前
spring-Bean
java·后端·spring
深入云栈1 小时前
Netty 4.2.x 源码深度解析 (十一):EventExecutor 业务线程池 —— 防止 IO 线程阻塞的并发模型
java·后端
吴声子夜歌1 小时前
Java——基本类型
java·开发语言
老当益壮梁奶奶1 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
不会就选b1 小时前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生2 小时前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试
伟大的车尔尼2 小时前
贪心的概念
数据结构·算法·贪心