快速排序

快速排序实现数组排序。

思路:

快速排序实际上就是冒泡排序的变种,快速排序利用分治法实现。

在数组中选择一个数做为基准,进行排序让基准左边的数都小于基准,让基准右边的数都大于基准,然后分别对左右两边的数组再次进行一次排序,直到数组不可再分为止。

数组元素的移动可以使用挖坑法。首先在数组中选择一个基准数组在基准的位置就出现了一个坑,接着数组从右边开始便利知道找到一个比基准小的数min为止,找到过后将坑的位置赋值为找到的数min,接着在min的位置就出现了一个坑,然后从左往右开始便利数组,找一个比基准大的数赋值到坑的位置,以此左右循环当左右两边相遇后将那个位置设置为基准的值就完成了一次排序。

代码:

package com.sort;

import java.util.Arrays;

public class Quickly {
    int [] nums;
    public  void sort(int l,int r){
       if(l>r){
           return;
       }
       int pivot=nums[l];
       int l1=l;
       int r1=r;
       while(l<r){
           for(int i=r;i>l;i--){
               if(nums[i]<pivot){
                   nums[l]=nums[i];
                   l++;
                   break;
               }
               else {
                   r--;
               }
           }
           for(int j=l;j<r;j++){
                if(nums[j]>pivot){
                    nums[r]=nums[j];
                    r--;
                    break;
                }
                else {
                    l++;
                }
           }
       }
       nums[l]=pivot;
       sort(l1,l-1);
       sort(l+1,r1);
    }
    public static void main(String[] args) {
        Quickly quickly=new Quickly();
        int[] nums=new int[10];
        for(int w=0;w<10;w++){
            int max=100,min=1;

            nums[w]=(int) (Math.random()*100);
        }
        quickly.nums=nums;
        quickly.sort(0,9);
        for (int s:quickly.nums){
            System.out.print(s);
        }
        Arrays.sort(nums);
        System.out.println();
        for(int e:nums){
            System.out.print(e);
        }
        System.out.println();
        if(nums.equals(quickly.nums)){
            System.out.println("成功");
        }

    }

}

  

posted @ 2021-03-10 11:46  silence_bug  阅读(70)  评论(0)    收藏  举报