快速排序法

来源:互联网 发布: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
原创粉丝点击