快速排序

简介:
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出

复杂度:
复杂度

原理:
1.从规定数组中选最左边为队长(基准点)
2.分队,将大于队长的放右边,将小于队长的放左边
3.左右两队重复第2步,直到一人一队

代码:

public static void main(String[] args) {
    int[] array = new int[100];

    Random rand = new Random();
    for (int i = 0; i < array.length; i++) {
        array[i] = rand.nextInt(200);
    }

    System.out.println("原数组:" + Arrays.toString(array));
    long start = System.currentTimeMillis();

    quickSort(array, 0, array.length - 1);

    long stop = System.currentTimeMillis();
    System.out.println("排序后的数组:" + Arrays.toString(array));
    System.out.println("所用时间:" + (stop - start) + "毫秒");
}


/**
 *
 * @param arr 所有队员
 * @param left 该小队人员开始位置(包含)
 * @param right 该小队人员结束位置(包含)
 */
public static void quickSort(int[] arr, int left, int right) {
    if (left >= right)//一人一队,递归结束
        return;

    int p = arr[left];//定该小队最左的元素为小队长
    int i = left, j = right;//i左边开始检查的位置,j右边开始检查的位置

    while (i != j) {//为小队长检查出它的位置,当i=j停止完毕(帮小队长找最终位置)
        while (arr[j] >= p && j > i) j--;//从该小队最右边向左边找小于小队长的队员下标(小于小队长的怎么可以站小队长后面)
        while (arr[i] <= p && j > i) i++;//从该小队最左边向右边找大于小队长的队员下标(大于小队长的怎么可以站小队长前面)

        //将该两名队员换位
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;

        //继续检查
    }

    //将小队长放到最终的位置
    arr[left] = arr[i];
    arr[j] = p;

    quickSort(arr, left, i - 1);//将left到小队长前面一位为一对(left为队长)
    quickSort(arr, i + 1, right);//将小队长后面一位到right位置为一队(小队长后面一位为队长)

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值