选择排序,插入排序,快速排序的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;
    }
}
相关推荐
⑩-2 分钟前
简单业务异常类
java
乘风!5 分钟前
NSSM启动tomcat部署Java程序
java·服务器·后端·tomcat
杜子不疼.14 分钟前
【LeetCode76_滑动窗口】最小覆盖子串问题
算法·哈希算法
BBB努力学习程序设计18 分钟前
Java 21虚拟线程与平台线程:JVM层面的深度对比与实现原理
java
代码无疆20 分钟前
学点java字节码更易于理解一些特殊的java语法效果
java·后端
ComputerInBook23 分钟前
代数基本概念理解——特征向量和特征值
人工智能·算法·机器学习·线性变换·特征值·特征向量
BBB努力学习程序设计26 分钟前
Java 8日期时间API完全指南:告别Date和Calendar的混乱时代
java
不能只会打代码33 分钟前
力扣--3433. 统计用户被提及情况
java·算法·leetcode·力扣
知青先生38 分钟前
E9项目调试方式
java·ide
本地运行没问题40 分钟前
从零散编译到一键打包:Maven如何重塑Java构建流程
java