快速排序-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(); } }
相关文章推荐
- 快速排序
- C#快速排序算法实例分析
- C#递归算法之快速排序
- C++快速排序的分析与优化详解
- php快速排序原理与实现方法分析
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)
- 快速排序的原理及java代码实现
- C/C++实现快速排序的方法
- c语言实现冒泡排序、希尔排序等多种算法示例
- 深入单链表的快速排序详解
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JavaScript实现快速排序的方法
- 逐步讲解快速排序算法及C#版的实现示例
- C#使用委托实现的快速排序算法实例