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);
    }
}
相关文章
|
7月前
|
搜索推荐 Java
【Java】快速排序
【Java】快速排序
59 0
|
8月前
|
搜索推荐 Java
Java递归思想与快速排序
Java递归思想与快速排序
54 0
|
1月前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
25 4
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--快速排序
数据结构与算法(Java篇)笔记--快速排序
|
2月前
|
搜索推荐 算法 Java
Java实现快速排序
Java实现快速排序
12 0
|
4月前
|
Java C++
快速排序(c++,java)
快速排序(c++,java)
17 0
|
4月前
|
搜索推荐 Java
java实现冒泡排序和快速排序代码
java实现冒泡排序和快速排序
24 1
JAVA-数据结构-快速排序
JAVA-数据结构-快速排序
|
5月前
|
搜索推荐 算法 Java
java排序算法:快速排序、归并排序、堆排序等
排序算法:快速排序、归并排序、堆排序等
62 0
|
7月前
|
自然语言处理 搜索推荐 算法
5秒用Java写一个快速排序算法?这个我在行
快速排序是一种非常高效的排序算法,由英国计算机科学家霍尔在1960年提出。它的基本思想是选择一个基准元素将待排序数组分成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大,然后对这两部分再分别进行快速排序,整个排序过程可以递归进行。 这种算法的主要步骤是: 1、 选择一个元素作为基准(pivot)。 2、 把数组分为两部分:一部分包含所有小于基准的元素,另一部分包含所有大于或等于基准的元素。这个过程称为分区(partition)操作。 3、 对这两个子数组进行递归排序