排序算法之快速排序

待排序数组 a={2,10,8,9,0,-5}

1.首先设置两个变量 i,j  分别指向 数组第一个数字2,和最后一个数字 -5

2.a[j]从后往前找第一个比a[i]小的数字,然后 交换他们的位置。数组顺序为-5,10,8,9,0,2。a[j]变成了2.

3.再从前往后找第一个比a[j]大的数字,交换他们的位置。数组顺序为-5,2,8,9,0,10。

4.按照此方法进行比较和交换,直到i==j时第一趟排序完毕,此时将i减1,j加1,然后进入递归。


java代码:

/**
 * Created by luwei on 2017/4/21.
 * 快速排序
 */
public class QuickSort {
    public static void main(String[] args) {
        int[] a = {2,10,8,9,0,-5,10};
        int start = 0;
        int end = a.length - 1;
        quickSort(a, start, end);
        for (int k : a) {
            System.out.print(k+" ");
        }
    }


    public static void quickSort(int[] a, int start, int end) {
        int i = start;  //相当于i  左索引
        int j = end;    //相当于j   右索引

        if (i >= j) {//判断是否到中间了,到中间返回
            return;
        }
        //判断指针逻辑变量,从左搜索还是向右搜索
        boolean flag = true;//false  左- >右   true 右->左
        while (j != i) {
            //如果i==j证明第一趟结束,每趟的标准值仅是一个,第一趟的标准值是第一个数字
            if (a[i] > a[j]) {
                //交换数字:比它小的元素放到左边    大的放到右边
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
                flag = (flag == true) ? false : true;//取反
            }
            //将指针向前或者向后移动,
            // false从左->右,true第二次从右到左
            if (flag) {
                j--;
            } else {
                i++;
            }
        }
                    /*排完第一次,再进行第二次的排列需要i--  和 j++
            保证指针的位置到达另外两个部分*/
        i--;
        j++;
        //递归
        quickSort(a, start, i);
        quickSort(a, j, end);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值