插入排序和快速排序

1、插入排序

 public static void insertionSort(int[] arr) {
        // 从数组的第二个元素开始(第一个元素默认为已排序)
        for (int i = 1; i < arr.length; i++) {
            int key = arr[i];  // 记录当前要插入的元素
            int j = i - 1;

            // 向左扫描已排序的部分,找到合适的插入位置
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];  // 将较大的元素向右移动
                j--;
            }

            arr[j + 1] = key;  // 在正确的位置插入当前元素
        }
    }

 

2、快速排序

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);
        }
    }

    // 分区函数,返回基准元素的最终位置
    public static int partition(int[] arr, int low, int high) {
        int pivot = arr[high];  // 选择最右边的元素作为基准
        int i = low - 1;        // i用于记录比基准小的元素的最右边界

        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                // 交换 arr[i] 和 arr[j]
                swap(arr, i, j);
            }
        }

        // 将基准元素放到正确位置
        swap(arr, i + 1, high);
        return i + 1;  // 返回基准元素的位置
    }

    // 辅助函数:交换数组中两个元素的位置
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {10, 7, 8, 9, 1, 5};

        System.out.println("排序前的数组:");
        printArray(arr);

        quickSort(arr, 0, arr.length - 1);

        System.out.println("排序后的数组:");
        printArray(arr);
    }

    // 辅助函数:打印数组
    public static void printArray(int[] arr) {
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}

 

 
 
posted @ 2024-08-14 20:39  抽象Java  阅读(3)  评论(0编辑  收藏  举报