Java实现快速排序

来源:互联网 发布:控制网络与现场总线 编辑:程序博客网 时间:2024/06/15 06:09

本案例需要完成的任务定义如下:实现快速排序算法。

 

快速排序的算法如下:

1)选定一个值作为“枢轴”,一般选择第一个元素(理想情况下应选择中位值);

2)基于枢轴进行排序,将小于枢轴的数据排在左边,大于枢轴的数据排在右边;

3)一轮排序之后,枢轴即在最终的位置;

4)采用递归,分别对左右两部分进行快速排序,直到每个部分仅有一个元素;

5)排序完成。

 

快速排序的关键点在于:每次快排仅确定“枢轴”位置。

package quickSortTest;import java.util.Random;public class QuickSortTest {//采用递归进行快速排序public static void quickSort(int arr[], int start, int end){//注意继续排序的前提是start<endif(start < end){int index = partition(arr, start, end);quickSort(arr, start, index-1);quickSort(arr, index+1, end);}}//将数据集分为两部分,返回枢轴所在位置public static int partition(int arr[], int start, int end){//枢轴定义为开始元素int pivot = arr[start];int left = start;int right = end;while(left < right){//如果右边的值大于等于pivot,right指示符左移//如果右边的值小于pivot,则将其换到左边//注意:arr[start]已经赋值给pivot,因此arr[left] = arr[right]不会冲刷掉数据while(left<right && arr[right]>=pivot) right--;arr[left] = arr[right];//如果左边的值小于等于pivot,left指示符右移//如果左边的值大于pivot,则将其换到右边while(left<right && arr[left]<=pivot) left++;arr[right] = arr[left];}//枢轴归位arr[left] = pivot;return left;}public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = new int[100];Random rand =new Random();int length = 100;for(int i=0;i<length;i++){arr[i] = rand.nextInt(100);System.out.print(arr[i]+",");}quickSort(arr,0,length-1);System.out.println();System.out.println("===========after quicksort==========");for(int i=0;i<length;i++){System.out.print(arr[i]+",");}}}


0 0
原创粉丝点击