Java快速排序

简介: 1.先从数列中取出一个数作为基准数(简单起见就选第一个数)2.分区过程:将比这个数大的数全放到他的右边,比他小的数全放到他的左边(分治)3.再对左右两边的区重复第一步和第二部操作,直到各区间只有一个数(递归)可以理解为: 快速排序 = 冒泡 + 分治 + 递归快排就是一种暴力排序法

1.先从数列中取出一个数作为基准数(简单起见就选第一个数)

2.分区过程:将比这个数大的数全放到他的右边,比他小的数全放到他的左边(分治)

3.再对左右两边的区重复第一步和第二部操作,直到各区间只有一个数(递归)

可以理解为: 快速排序 = 冒泡 + 分治 + 递归

快排就是一种暴力排序法

package com.sscm.saas;
import org.junit.Test;
import java.util.Arrays;
/**
 * @author samxie
 * @version 1.0
 * @date 2021/12/27 19:40
 **/
public class Test2 {
    @Test
    public void test10() {
        int arr[] = {12,2,432,4,5,6,2,34,7,3,2,2};
        System.out.println(Arrays.toString(arr));
        KSPX(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void KSPX(int[] arr) {
        int l = 0;
        int h = arr.length - 1;
        KSPX(arr, 1, h);
    }
    private static void KSPX(int[] arr, int l, int h) {
        if (l < h) {
            int index = part(arr, l, h);
            KSPX(arr, l, h - 1);
            KSPX(arr, l + 1, h);
        }
    }
    private static int part(int[] arr, int l, int h) {
        int i = l;
        int j = h;
        int x = arr[l];
        while (i < j) {
            while (arr[j] >= x && i < j) {
                j--;
            }
            if (i < j) {
                arr[i] = arr[j];
                i++;
            }
            while (arr[i] <= x && i < j) {
                i++;
            }
            if (i < j) {
                arr[j] = arr[i];
                j--;
            }
        }
        arr[i] = x;
        return i;
    }
}

===========

快速排序 第二版

public class test3 {
    @Test
    public void test922() {
        int[] arr = {5, 1, 7, 3, 1, 343, 34443, 6, 9, 4};
        quickSort(arr, 0, arr.length - 1);
        for (int i : arr) {
            System.out.print(i + "\t");
        }
    }
    private static void quickSort(int[] arr, int leftIndex, int rightIndex) {
        if (leftIndex >= rightIndex) {
            return;
        }
        int left = leftIndex;
        int right = rightIndex;
        //待排序的第一个元素作为基准值
        int key = arr[left];
        //从左右两边交替扫描,直到left = right
        while (left < right) {
            while (right > left && arr[right] >= key) {
                //从右到左扫描,找到第一个的匀速
                right--;
            }
            arr[left] = arr[right];
            while (left < right && arr[left] <= key) {
                left++;
            }
            arr[right] = arr[left];
        }
        //基准归位
        arr[left] = key;
        //对基准值右边的元素进行
        quickSort(arr, leftIndex, left - 1);
        quickSort(arr, right + 1, rightIndex);
    }
}
相关文章
|
搜索推荐 Java
【Java】快速排序
【Java】快速排序
95 0
|
搜索推荐 Java
Java递归思想与快速排序
Java递归思想与快速排序
75 0
|
3月前
|
搜索推荐 Java 索引
|
5月前
|
搜索推荐 算法 Java
Java中的快速排序、归并排序和堆排序是常见的排序算法。
【6月更文挑战第21天】Java中的快速排序、归并排序和堆排序是常见的排序算法。快速排序采用分治,以基准元素划分数组并递归排序;归并排序同样分治,先分割再合并有序子数组;堆排序通过构建堆来排序,保持堆性质并交换堆顶元素。每种算法各有优劣:快排平均高效,最坏O(n²);归并稳定O(n log n)但需额外空间;堆排序O(n log n)且原地排序,但不稳定。
46 3
|
5月前
|
Java
快速排序(java)
快速排序(java)
|
5月前
|
Java
快速排序-Java版本
快速排序-Java版本
25 0
|
6月前
|
算法 Java
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序...
<八大排序>万字详解(Java实现).插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序
29 0
|
6月前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
43 4
|
6月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
6月前
|
搜索推荐 算法 Java
Java实现快速排序
Java实现快速排序
34 0