快速排序-java实现

来源:互联网 发布:网络产品线是干什么的 编辑:程序博客网 时间:2024/06/05 02:16

快速排序:

将数据列表进行分区,然后对分区进行递归式排序,从而完成对整个列表的排序。

排序策略:

1.选择一个列表元素作为分区元素;
2.分割该列表,使小于分区元素的值位于分区元素左边,大于分区元素的值位于分区元素右边;
3.将上述两个步骤递归用于两个分区;
4.直到一个分区只含有一个元素,其内在就已经排好序了。


例子:

初始:305 65 7 90 120 110 8
将90作为分区元素,重新组织列表得到:8 65 7 90 120 110 305
再对分区元素左右两边递归进行快速排序。

Code:

/**Created on 2016年7月10日*Copyright 2016 Yong Cai Limited crop. All Rights Reserved**/package org.cy.sort;public class QuickSort {public static void main(String[] args) {String[] str = {"f","qq","wei","chat","phone","nba"};printArr(quickSort(str));}public static <T extends Comparable<? super T>> T[] quickSort(T[] data){quickSort(data,0,data.length - 1);return data;}public static <T extends Comparable<?super T>> T[] quickSort(T[] data, int minIndex, int maxIndex){if(minIndex < maxIndex){int partitionIndex  = partition(data, minIndex, maxIndex);quickSort(data, minIndex, partitionIndex - 1);quickSort(data, partitionIndex + 1, maxIndex);}return data;}public static <T extends Comparable<? super T>> int partition(T[] data, int minIndex, int maxIndex){int left;int right;int mid = (minIndex + maxIndex) / 2;T partitionElem = data[mid];swap(data, mid,minIndex);left = minIndex;right = maxIndex;while(left < right){while(left < right && data[left].compareTo(partitionElem) <= 0){left++;}while(data[right].compareTo(partitionElem) > 0){right--;}if(left < right){swap(data, left, right);}}swap(data, minIndex, right);return right;}public static <T> void swap(T[] data, int pos1, int pos2){T tmp;tmp = data[pos1];data[pos1] = data[pos2];data[pos2] = tmp;}public static <T> void printArr(T[] data){int len = data.length;for(int i = 0; i < len; i++){System.out.print(data[i] + " ");}System.out.println();}}





1 0
原创粉丝点击