快速排序java语言描述

来源:互联网 发布:传奇h5源码论坛 编辑:程序博客网 时间:2024/05/17 23:47

快速排序是一种很好的排序算法 ,最坏运行时间为Θ(n^2),期望的运行时间为Θ(nlgn),

并且是原地排序。

像合并排序一样,快速排序用到了分治法和递归的思想。

  • 数组nums[start,end]被划分为两个(可能为空)子数组nums[start,q-1]和nums[q+1,end],

使得nums[start,q-1]中的每个元素都小于nums[q],nums[q+1,end]中的大于等于nums[q]。

  • 通过递归调用快速排序,对子数组nums[start,q-1]和nums[q+1,end]排序。
  • 因为 子数组都是就地排序的,将它们合并起来并不需要操作:整个nums数组已排序好。
/** *  * @author Administrator * */public class QuickSort {private static int[] nums = new int[10];public QuickSort() {for (int i = 0; i < nums.length; i++) {nums[i] = (int) (Math.random() * 100);}}/** * 输出数组 */static void showNumbers() {for (int i = 0; i < nums.length; i++) {if (i % 10 == 0) {System.out.println();}System.out.printf("%4d", nums[i]);}}/** * 数组划分函数,算法关键所在! * @param nums * @param start * @param end * @return */private int partition(int[] nums, int start, int end) {int i = start - 1;for (int j = start; j < end; j++) {if (nums[j] <= nums[end]) {i += 1;swap(nums, i, j);}}swap(nums, i + 1, end);return (i + 1);}/** *  * @param nums * @param start * @param end */public void quickSort(int[] nums, int start, int end) {if (start < end) {int q = partition(nums, start, end);quickSort(nums, start, q - 1);quickSort(nums, q + 1, end);}}/** *  * @param nums * @param i * @param j */private void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根QuickSort sort = new QuickSort();showNumbers();System.out.println();sort.quickSort(nums, 0, nums.length - 1);showNumbers();}}

运行输出:

原创粉丝点击