●快速排序

●快速排序

快速排序法介绍:

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

快速排序代码

import java.util.Arrays;

public class QuickSort{
    //快速排序
    public static void main(String[] args) {

        int[] arr = new int[-1,84,-567,0,5,96];
        quuickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    public static void quuickSort(int[] arr,int left,int right){
        int l = left; //左下标
        int r = right; //右下标
        int pivot = arr[(left+right)/2];
        //pivot  中轴值
        int temp=0;
        while(r>l){
            while(arr[l]<pivot){
                l+=1;
            }
            while(arr[r]>pivot){
                r-=1;
            }
            if (l>=r){
                break;
            }
            //交换
            temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            //如果交换完,发现这个arr[l] == pivot值相等 ++
            if (arr[l] == pivot){
                l+=1;
            }
            //如果交换完,发现这个arr[l] == pivot值相等 --
            if (arr[r] == pivot){
                r-=1;

            }
        }

        //如果 l==r, 必须l++,r--,否则出现栈溢出
        if (l==r){
            l+=1;
            r-=1;
        }

       //左递归
        if (left<r){
            quuickSort(arr,left,r);
        }
        //右递归
        if (l<right){
            quuickSort(arr,l,right);
        }

    }

}

查看80000个随机数排序时间 代码

package day10;

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

public class QuickSort{
    //快速排序
    public static void main(String[] args) {

        int[] arr = new int[80000];
        for (int i=0;i<80000;i++){
            arr[i] = (int)(Math.random()*80000); // 生成一个 0-80000的数
        }
        System.out.println("排序前");
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date1Str = simpleDateFormat.format(date);
        System.out.println("排序前的时间是="+date1Str);
        quuickSort(arr,0,arr.length-1);
        Date date2 = new Date();
        String date2Str = simpleDateFormat.format(date2);
        System.out.println("排序后的时间是="+date2Str);
        //System.out.println(Arrays.toString(arr));
    }

    public static void quuickSort(int[] arr,int left,int right){
        int l = left; //左下标
        int r = right; //右下标
        int pivot = arr[(left+right)/2];
        //pivot  中轴值
        int temp=0;
        while(r>l){
            while(arr[l]<pivot){
                l+=1;
            }
            while(arr[r]>pivot){
                r-=1;
            }
            if (l>=r){
                break;
            }
            //交换
            temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            //如果交换完,发现这个arr[l] == pivot值相等 ++
            if (arr[l] == pivot){
                l+=1;
            }
            //如果交换完,发现这个arr[l] == pivot值相等 --
            if (arr[r] == pivot){
                r-=1;

            }
        }

        //如果 l==r, 必须l++,r--,否则出现栈溢出
        if (l==r){
            l+=1;
            r-=1;
        }

       //左递归
        if (left<r){
            quuickSort(arr,left,r);
        }
        //右递归
        if (l<right){
            quuickSort(arr,l,right);
        }

    }

}

发布了40 篇原创文章 · 获赞 0 · 访问量 759

猜你喜欢

转载自blog.csdn.net/weixin_42463611/article/details/104511742