A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 3872982 中级黑马   /  2015-11-4 22:59  /  895 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

快速排序算法使用的分治法策略来把一个序列分为两个子序列来实现排序的
思路:

1.从数列中挑出一个元素,称为“基准“
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分操作
3.递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

public static void quickSort(int[] numbers, int start, int end) {   
    if (start < end) {   
        int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)   
        int temp; // 记录临时中间值   
        int i = start, j = end;   
        do {   
            while ((numbers[i] < base) && (i < end))   
                i++;   
            while ((numbers[j] > base) && (j > start))   
                j--;   
            if (i <= j) {   
                temp = numbers[i];   
                numbers[i] = numbers[j];   
                numbers[j] = temp;   
                i++;   
                j--;   
            }   
        } while (i <= j);   
        if (start < j)   
            quickSort(numbers, start, j);   
        if (end > i)   
            quickSort(numbers, i, end);   
    }   
}  



1 个回复

倒序浏览
算法的东西有点绕
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马