java语言实现快速排序

此生再无相见时 提交于 2020-03-17 04:53:02
  • 快速排序
    快速排序是对冒泡排序的一种改进。
    首先,找出一个基准值,然后将元素中比这个基准值小的放在基准值左边,比基准值大的元素放在基准值右边。这样一趟排序下来,基准值左边的元素都比基准值小,基准值右边的元素都比基准值大。
    然后在用同样的方法,分别对左边元素和右边元素递归地进行排序,最终使整个序列有序。

  • 这里,我选中间元素为基准值,我将从序列两端进行遍历,从左边遇到一个比基准值大的元素便停下,从右边遇到一个比基准值小的元素也停下,然后将两个元素交换位置。但是在遍历过程中,如果遍历到同一个元素时,就可以退出遍历了,因为此时左右两边都已经满足小于或者大于基准值了。交换之后还要判断当前元素是否是基准值,如果左边当前元素为基准值,接下来判断右边元素即可;右边同理。

  • 代码如下

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

    public static void quickSort(int[] array, int left, int right){
        int l = left;
        int r = right;
        int pivot = array[(left+right)/2];
        int temp = 0;
        while (l<r){
            //找到数组中pivot元素位置之前的,比pivot元素大的数
            while (array[l]<pivot){
                l = l+1;
            }
            //找到数组中pivot元素位置之后的,比pivot元素小的数
            while (array[r]>pivot){
                r = r-1;
            }

            //如果l>=r,说明pivot元素两边已经满足要求
            if (l>=r){
                break;
            }

            //找到之后,将他们交换
            temp = array[l];
            array[l] = array[r];
            array[r] = temp;

            //如果array[l] == pivot,pivot左边的元素已经都比pivot小了
            //但是右边的元素还需要再判断的
            if (array[l] == pivot){
                r--;
            }
            //原理同上
            if (array[r] == pivot){
                l++;
            }
        }

            if (l==r){
                l++;
                r--;
            }

            if (left<r){
                quickSort(array,left,r);
            }
            if (l<right){
                quickSort(array,l,right);
            }
    }
}

  • 此为学习笔记
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!