快速排序算法

时间:2014-04-29 10:33:46   收藏:0   阅读:404

利用挖坑填数+分治实现的快排

代码如下:

mamicode.com,码迷
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;

public class TestJava {

    public static void main(String[] args) {

        String string = readFromConsole();

        System.out.println("input:" + string);

        char chs[] = string.toCharArray();

        qSort(chs, 0, chs.length - 1);

        System.out.println("after sorted:" + new String(chs));

    }

    private static void qSort(char[] chs, int start, int end) {

        if (start >= end) {
            return;
        }

        char fuck = chs[start]; // 先从数列中取出一个数作为基准数。
        int left = start;
        int right = end;

        while (left < right) {

            // 跳过比基数大于等于的
            while (left < right && chs[right] >= fuck) {
                right--;
            }

            // 比基数小的换到左边
            if (left != right) {
                chs[left] = chs[right]; // 用这次的值填上次的坑。
                left++;
            }

            while (left < right && chs[left] < fuck) {
                left++;
            }

            // 比基数大的换到右边
            if (left != right) {
                chs[right] = chs[left];
                right--;
            }
        }

        chs[left] = fuck; // 把基数放到中间
        qSort(chs, start, left);
        qSort(chs, left + 1, end);
    }

    /**
     * 从终端输入一行字符串
     * 
     * @return
     */
    private static String readFromConsole() {
        String inStr = null;

        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));

        try {
            inStr = reader.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return inStr;
    }
}
mamicode.com,码迷

 

 

快速排序算法,码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!