3 - JAVA实现快速排序

2017-03-27  本文已影响106人  minminaya

基本思想:


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * @author NIWA
 *
 * 
 * 依次输入5个数字
 */
public class Main {
    int[] a = new int[100];
    int temp;//基准数
    static int n;//排序个数
    int i;
    int j;
    public static void main(String[] args) {
        Main mMain = new Main();
        mMain.scanf();
        mMain.sort(1, n);
        mMain.print();

    }


    private void print() {
        for (int i = 1; i <= n; i++) {
            System.out.println(a[i]);
        }
    }

    /**
     *  输入数据
     * */
    private void scanf() {
        Scanner sc1 =new Scanner(System.in);
        n = sc1.nextInt();

        for (int i = 1; i <= n; i++) {
            Scanner sc2 = new Scanner(System.in);
            a[i] = sc2.nextInt();
        }
    }

    /**
     * 快速排序
     */
    private void sort(int left, int right) {
        if(left > right){
            return;
        }

        temp = a[left];

        i = left;
        j = right;
        while(i != j){
            //顺序很重要,要从右边开始向左找,找比基准数小的
            while(a[j] >= temp && i < j){
                j--;//如果大于temp,那就接着找
            }
            
            //从左边向右找比基准数大的
            while(a[i] <= temp && i < j){
                i++;
            }

            
            //如果还没相遇,那就交换两个数在数组中的位置
            if(i < j){
                int t;
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        
        //基准数归位,放到该放的位置
        a[left] = a[i];
        a[i] = temp;
        
        
        sort(left, i-1);//继续处理左边的,这里是一个递归的过程
        sort(i+1, right);//右边的
    }
}

测试

6
8 7 5 3 9 4

输出
3 4 5 7 8 9

时间复杂度

上一篇 下一篇

猜你喜欢

热点阅读