Java 快速排序
来源:互联网 发布:艾博网络 编辑:程序博客网 时间:2024/05/22 08:20
1、算法概念。
快速排序(Quicksort)是对冒泡排序的一种改进。
2、算法思想。
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
3、实现思路。
- 以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。
- 把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
- 重复第①、②步,直到左区处理完毕。
public class Test {/*** 将list数组进行一分为二* * @param list* @param low* @param high* @return*/ public static int getMiddle(Integer[] list, int low, int high) { // 数组的第一个作为中轴 int tmpMiddle = list[low]; // 左边的index小于右边的index while (low < high) { /** * 如果right > tempMiddle(不动) */ while (low < high && list[high] > tmpMiddle) { high--; } // 比中轴小的记录移到低端 list[low] = list[high]; /** * 如果left < tempMiddle(不动) */ while (low < high && list[low] < tmpMiddle) { low++; } // 比中轴大的记录移到高端 list[high] = list[low]; } list[low] = tmpMiddle; // 中轴记录到尾 return low; // 返回中轴的位置 } public static void _quickSort(Integer[] list, int low, int high) { if (low < high) { // 将list数组进行一分为二 int middle = getMiddle(list, low, high); _quickSort(list, low, middle - 1); // 对低字表进行递归排序 _quickSort(list, middle + 1, high); // 对高字表进行递归排序 } } public static void quick(Integer[] str) { if (str.length > 0) { // 查看数组是否为空 _quickSort(str, 0, str.length - 1); } } /** * @param args */ public static void main(String[] args) { Integer[] list = { 34, 3, 53, 2, 23, 7, 14, 10 }; quick(list); for (int i = 0; i < list.length; i++) { System.out.print(list[i] + " "); } System.out.println(); }}
阅读全文
0 0
- 排序-快速排序-Java
- java排序之快速排序
- Java排序算法 快速排序
- 快速排序(java排序)
- java 快速排序,冒泡排序
- 算法:排序----Java快速排序
- 【交换排序】快速排序--Java
- java 插入排序+快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java排序算法:快速排序
- Java排序-快速排序
- Java排序算法:快速排序
- Java排序算法--》快速排序
- JAVA排序算法---快速排序
- Java 快速排序 归并排序
- Java排序算法--快速排序
- java 冒泡排序、快速排序
- 网卡故障:弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的
- UVA 10870 Recurrences(矩阵快速幂)
- oss直传和回调
- Android 数据绑定解耦DataBinding的简单使用
- Android Studio更新升级方法
- Java 快速排序
- 使用SparkSQL 分析日志中IP数、流量等数据
- 5.19 JLL--实习日志--view_availability前端和后端
- 网络编程-概念及UDP、TCP连接
- typename的作用
- Ajax固定写法
- 【龙芯1c库】封装引脚复用接口和使用示例
- gensim python 学习
- htppClient的工具包