数据结构-快速排序算法(Java实现)

快速排序算法
1.选择第一个元素(a)作为一个坑,把它保存下来,然后先从右边开始找一个比它大的元素,将它们的位置互换
2.从右边找一个比a小的元素,然后交换它们的位置
3.依次类推,最后得到a为数组的中间元素
4.最后对a两边进行递归遍历得出数组

package datastructure.sort;

/*
    @CreateTime 2021/9/14 20:30
    @CreateBy cfk
   
*/

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class QuickSorting {

    public static void main(String[] args) {
        int[] arr = {-9,78,0,23,-567,70};
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));

        // 测试80000条数据 冒泡排序所需要的时间 1s
        // int[] arr = new int[80000];
        // for (int i = 0; i < 80000; i++) {
        //     arr[i] = (int) (Math.random()*8000000);
        // }
        //
        // SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
        // String s1 = sdf.format(new Date());
        // System.out.println(s1);
        //
        //
        // quickSort(arr,0,arr.length-1);
        //
        //
        // String s2 = sdf.format(new Date());
        // System.out.println(s2);


    }


    public static void quickSort(int[] arr, int left, int right){

        //判断左节点要小于右节点 否则递归的时候 会出现数组越界
        if (left < right) {

            int l = left;
            int r = right;
            //定义一个临时变量存储第一个元素
            int x = arr[l];

            //当左节点小于右节点时运行程序
            while (l < r) {
                //从右边开始寻找比第一个元素小的元素
                while (l < r && x <= arr[r]){
                    r--;
                }
                //找到后 把第一个元素赋值为找的元素 并且把指针右移
                if (l < r) {
                    arr[l] = arr[r];
                    l++;
                }
                //从左边开始寻找比第一个元素大的元素
                while (l < r && x > arr[l]){
                    l++;
                }
                //找到后 把倒数第一个元素赋值为找的元素 并且把指针左移
                if (l < r) {
                    arr[r] = arr[l];
                    r--;
                }
            }
            //最后把最后一个位置填上第一个元素 此时此元素的左边全部小于它 右边全部大于它
            //但是左右两边元素并不保证有序
            arr[l] = x;
            //递归遍历左边所有的元素
            quickSort(arr,left,l-1);
            //递归遍历右边所有的元素
            quickSort(arr,l+1, right);
        }

    }
}

上一篇:快速排序(lua实现)


下一篇:排序算法——快速排序