JAVA 快速排序(原理及详细解释)
2016-11-08 10:54
274 查看
1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
(2)实例:
(2)实例:
/** * 快速排序 * * @author lipeng * 思路: 1、选定轴值位置,记录轴值 * * 2、循环(条件:直到左边元素=右边元素),从右遍历,搜索满足条件的元素,从左遍历,搜索满足条件的元素。 * * 3、循环(条件:直到左边元素=右边元素 &&元素)从右遍历,遍历不满足条件的元素。 * * 4、搜索到满足条件的元素,填坑(将此元素填入轴值位置,轴值++) * * 5、循环(条件:直到左边元素=右边元素)从左遍历,遍历不满足条件的元素。 * * 6、搜索满足条件的元素,填值坑(将此元素填入轴值位置,轴值--) * * 7、当以上条件都不满足时(退出以上循环),即左边元素 = 右边元素时,此时,填入轴值 * * 8、以轴值为中心,分左右两个数组,分别递归调用此方法,直到所有元素满足条件。 */ public class QuickSort { public static void main(String[] args) { int[] a = { 77, 23, 45, 89, 0, 34, 79, 27, 20, 45, 87, 23, 04, 74, 58, 70, 90 }; quickSort(a, 0, a.length - 1); for (int b : a) { System.out.print(b + " "); } } public static void quickSort(int[] intArray, int low, int hight) { if (intArray.length == 0) { return; } int i = low; // 定义左指钟 int j = hight; // 定义右指钟 int index = intArray[low]; // 保存轴值 while (i < j) { // 对数组每轮遍历,将数组以轴值为中心,一分为二 while (i < j && index <= intArray[j]) { // 从左开始遍历不满足条件的值 j--; } if (i < j) { // 将满足条件的值填入原轴值位置 ,并将左指钟右移 intArray[i] = intArray[j]; i++; } while (i < j && index >= intArray[i]) { // 从右开始遍历不满足条件的值 i++; } if (i < j) { // 将满足条件的值填入原轴值位置 ,并将右指钟左移 intArray[j] = intArray[i]; j--; } intArray[i] = index; quickSort(intArray, low, i - 1); // 分为两个数组后,递归调用 quickSort(intArray, i + 1, hight); } } }
相关文章推荐
- (JAVA SE 学习笔记)Java.SE.第011讲.面向对象之封装.续二(对一些原理机制进行了详细的解释,适合初学者学习)
- 快速排序原理及java实现
- Java基础-关于session的详细解释 (二)
- Java中数据库连接池原理机制的详细讲解
- Java中数据库连接池原理机制的详细讲解
- Java基础-关于session的详细解释
- Mysql (控制台,C++,Java,PHP等等)各种中文乱码的详细解释
- Java基础-关于session的详细解释(经典)(二)
- Java基础-关于session的详细解释(一)
- Java中数据库连接池原理机制的详细讲解
- Java基础-关于session的详细解释 (一)
- Java基础-关于session的详细解释
- Java中数据库连接池原理机制的详细讲解
- 比较详细的多态原理解释。
- Java中数据库连接池原理机制的详细讲解
- Java中数据库连接池原理机制的详细讲解
- 对jsp中声明脚本和脚本段的详细解释(后台原理)
- Java基础-关于session的详细解释
- Java基础-关于session的详细解释
- 【J2EE技术大杂烩】Java基础-关于session的详细解释