快速排序法
来源:互联网 发布:java ee eclipse 编辑:程序博客网 时间:2024/05/23 21:59
今天复习快速排序法。快速排序法主要分为三步:分割、分割、合并。下面是代码:
package com.sort;import java.util.Random;/** * * 快排策略一:对初始排序序列,先备份轴元素(一般为首元素),取两个游标left和right分别从左到右扫描,右到左扫描。left指向最左边的下标,right指向最右边 * 的下标。游标移动规则为:首先right向左搜索,找到第一个不大于轴元素的,把它移动到left的位置。再从left向右搜索,找到一个大于轴的元素,把它移动到right的位置。 * 重复上述过程,直到left=right,最后把轴元素放在right的位置 * * @author zhang * @date 2015年5月26日 下午6:47:51 */public class QuickSort {public static int LENGTH=12;public static void main(String[] args) {int[] arr=new int[LENGTH];initArr(arr);displayArr(arr);quickSort(arr);displayArr(arr);}public static void quickSort(int[] arr) {quickSort(arr,0,arr.length-1);}/** * * @param arr 需要排列序列数组 * @param left 需要排序序列的最左元素下标 * @param right 需要排序序列的最右元素下标 */private static void quickSort(int[] arr, int left, int right) {if(left < right){int pivot = arr[left];int beg = left;int end = right;while (beg < end) {while(end > beg && arr[end] > pivot)end--;arr[beg] = arr[end];while(end > beg && arr[beg] <= pivot)beg++;arr[end] = arr[beg];} arr[end] = pivot;quickSort(arr, left, end-1);quickSort(arr, end+1, right);}}/** * 遍历数组 * @param arr */public static void displayArr(int[] arr) {for (int i : arr) {System.out.print(i+" ");}System.out.println();}/** * 通过随机数为一个int类型数组进行初始化赋值 * @param arr */public static void initArr(int[] arr) {Random rd=new Random();for (int i = 0; i < arr.length; i++) {arr[i]=rd.nextInt(arr.length);}}}
package com.sort;import java.util.Random;/** * 快速策略二: * 分别从待排序序列的两边相向遍历,即从左向右确定第一大于轴元素的元素, * 从右向左确定第一个不大于轴元素的元素,然后交换二者 * @author zhang * @date 2015年5月26日 下午6:46:06 */public class QuickSort2 {public static int LENGTH=12;public static void main(String[] args) {int[] arr=new int[LENGTH];initArr(arr);displayArr(arr);quickSort(arr);displayArr(arr);}/** * * @param arr */public static void quickSort(int[] arr) {quickSort(arr,0,arr.length-1);}/** * * @param arr 需要排列序列数组 * @param left 需要排序序列的最左元素下标 * @param right 需要排序序列的最右元素下标 */private static void quickSort(int[] arr, int left, int right) {if(left < right){int pivot = arr[left];int beg = left;int end = right;while (beg <= end) {while(end >= beg && arr[end] > pivot)end--;while(end >= beg && arr[beg] <= pivot)beg++;if(beg < end){//交换两个元素的值int temp = arr[beg];arr[beg] = arr[end];arr[end] = temp;beg++;end--;}} arr[left] = arr[end];arr[end] = pivot;quickSort(arr, left, end-1);quickSort(arr, end+1, right);}}/** * 遍历数组 * @param arr */public static void displayArr(int[] arr) {for (int i : arr) {System.out.print(i+" ");}System.out.println();}/** * 通过随机数为一个int类型数组进行初始化赋值 * @param arr */public static void initArr(int[] arr) {Random rd=new Random();for (int i = 0; i < arr.length; i++) {arr[i]=rd.nextInt(arr.length);}}}
0 0
- 排序--快速排序法
- 【排序】快速排序法
- 快速排序法排序
- 排序算法--快速排序法
- 排序算法--快速排序法
- 快速排序法
- 快速排序法
- 快速排序法
- 快速排序法
- 快速排序法qsort
- java快速排序法
- 通用快速排序法
- 快速排序法
- 快速排序法程序
- 快速排序法
- 快速排序法
- 快速排序法
- 快速排序法
- C++异常(1) - 异常介绍
- 计算机网络各层协议
- Hadoop之——有趣问答(一)
- 如何在TableViewController中得到触摸点坐标
- What is Android?
- 快速排序法
- [LeetCode]Add Two Numbers
- 基于imgAreaSelect的用户图像截取
- 初学者
- 边做游戏边学android—6(塔防①)
- error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _wmain 中被引用
- 程序猿之路-----学习MJ视频总结1---UIImageView和UIButton的区别 、iOS懒加载
- 前方高能--Retrofit
- 中国大学MOOC-陈越、何钦铭-数据结构基础习题集 00-自测3-数组元素循环右移问题 (20)