快速排序法(java版,分治法,递归)

简介: 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过--趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列快速排序

快速排序法介绍:


快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过--趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列


快速排序 法示意图:




快速排序法代码实现:

import java.util.Arrays;
import java.util.Random;
public class QuickSort {
    public static void main(String[] args) {
        //产生一个随机数组
        Random r = new Random();
        int arr[] = new int[20];
        for(int i=0;i<arr.length;i++){
            //让随机数有正有负
            if(r.nextInt()%2==0){
                arr[i] =-r.nextInt(300);
            }
            else {
                arr[i] =r.nextInt(300);
            }
        }
        System.out.println("排序前:"+Arrays.toString(arr));
        quickSort(arr, 0, arr.length - 1);
        System.out.println("排序后:"+Arrays.toString(arr));
    }
    public static void quickSort(int[] arr, int left, int right) {
        int l = left;//左下标
        int r = right;//右下标
        int pivot = arr[(left + right) / 2];//中轴值
        int temp=0; //临时存储变量
        while (l <= r) {
            while (arr[l]<pivot){
                l++;
            }
            while (arr[r]>pivot){
                r--;
            }
            if (l>=r){
                break;
            }
            //交换
            temp=arr[r];
            arr[r]=arr[l];
            arr[l]=temp;
            if (arr[l]==pivot){
                r--;
            }
            if (arr[r]==pivot){
                l++;
            }
        }
        if (l==r){
            l++;
            r--;
        }
        //向左递归
        if (left<r){
            quickSort(arr,left,r);
        }
        //向右递归
        if (right>l){
            quickSort(arr,l,right);
        }
    }
}

运行结果:

相关文章
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
135 1
java基础(11)函数重载以及函数递归求和
|
搜索推荐 Java 索引
java实现快速排序(详细解释代码和逻辑)
java实现快速排序(详细解释代码和逻辑)
|
算法 Java
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
277 7
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
198 0
|
Java 大数据 程序员
老程序员分享:java递归
老程序员分享:java递归
92 0
java实现斐波那契数列(递归、迭代、流)
java实现斐波那契数列(递归、迭代、流)
388 1
二分查找-递归(java)
二分查找-递归(java)
148 0
快速排序(java)
快速排序(java)
java使用递归遍历文件目录
java使用递归遍历文件目录
177 0
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
126 4