java实现快速排序

import java.util.Scanner;

public class QuickSort {
    //快速排序:以一个数为基数,把数组分成两部分,左边的数比基数小,右边的数比基数大    //  ,再把左右两边的数按这种方式排序,直到数组全部排序完毕。
    public static int onceTraversal(int[] a, int left, int right) {
        //以数组第一个为基数,
        //left为最左边的索引,right为最右边的索引
        int standard = a[left];// 以数组左边第一个元素为基数
        while (left < right) {
            //把a[left]看成一个坑位,从数组右边找一个比基数小的数,填到坑位
            while (a[right] > standard&&left<right) {
                right--;
            }
            if (left==right) {
                break;
            }
            //填坑,同时左边指针向右移动一格
            a[left] = a[right];
            left++;
            //这时把a[right]看成一个坑位,从数组左边边找一个比基数小的数,填到坑位
            while (a[left] < standard&&left<right) {
                left++;
            }
            if (left==right) {
                break;
            }
            //填坑,同时right向左移动一格
            a[right]=a[left];
            right--;
        }
        //把基数填到剩下的坑位
        a[left]=standard;
        return left;
    }
    public static void quickSort(int[] a, int left, int right) {
        //递归:以middle为中间数把数组分成左右两部分,两边再分别排序,直到left=right
        if (left <right) {
            int middle = onceTraversal(a, left, right);
            quickSort(a, left, middle - 1);
            quickSort(a, middle + 1, right);
        }
    }

    public static void main(String[] args) {
        //用户输入一个数确定数组大小
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter a interge to ensure the large of array:");
        //产生随机数
        int large = scanner.nextInt();
        scanner.close();
        int[] a = new int[large];
        int i;
        //打印长度为large的随机数组
        for (i = 0; i < a.length; i++) {
            a[i] = (int) (100 * Math.random());
            System.out.print(a[i] + " ");
        }
        System.out.println();
        System.out.println("\nAfter reoder ,the result of array is:");
         //调用quickSort方法
        quickSort(a, 0, a.length-1);
        //打印排序好的数组
        for (i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }

    }
}
运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值