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

Java实现快速排序

2016-04-01 23:49 323 查看
本案例需要完成的任务定义如下:实现快速排序算法。

 

快速排序的算法如下:

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<end
if(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 stub
int[] 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]+",");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: