Fighting

分寸 , 克制

java实现快速排序

快速排序是平均速度最快的排序算法,他的平均时间复杂度 n*log n)

图片来源 维基百科

快速排序采用分治法来进行排序,首先先给出一个数组,在一开始随意选择一个数pivot,已pivot作为这个数组的分界点,把大于pivot的数放在右边,小于pivot的数放在左边,然后在已pivot的两边分界点,右进行一次上一次的操作,这样就能达到排序的目的了,

好了,我们来看一下代码。

private static void partition(int[] array,int left,int right) {//这里是传递的数组与最左边点与最右边点
        int i = left,j=right;
        int pivot =array[(left+right)/2];//我们已将这个数组的最中间的值作为分界点

        while (i<=j) {  //当中间的值与两边的值比较与交换完,结束循环,递归另外两个被分割的数组

        while (array[i]<pivot) {//从传递进来的最左边开始如果array[i]小于中间值就那么下边就往右 移动一次
            i++;
        }
        while (array[j]>pivot) {
        //如果array[j]大于中间值就那么下边就往左 移动一次
            j--;

        }
        if (i<=j) {//当已中间值为分界点的两边,没有比较完就交换

            int temp=array[i];
            array[i]=array[j];
            array[j]=temp;
            i++;
            j--;
            /*
            *如果两边都满足了条件就交换位置,然后位置都向前移动
            */

        }

        }   
        //第一次中间点比较完之后,就要开始比较另外两边了
        if (left<j) {

            partition(array, left, j);

        }
        if (i<right) {
            partition(array, i, right);

        }


    }

这段代码就是快速排序了,我们对这个数组进行了,分治法,首先把一个数组分成两个数组,两个数组要中间值对两个数比较完了之后又会把这和两个交换完的数组分成4个数组,进行找中间值,比较操作。

我们来看一下结果

这就是运行结果了

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33048603/article/details/51235205
个人分类: ACM
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

java实现快速排序

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭