您的位置:首页 > 编程语言 > Java开发

快速排序-java实现

2016-07-10 17:27 344 查看

快速排序:

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

排序策略:

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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息