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]+",");
}
}
}
快速排序的算法如下:
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]+",");
}
}
}
相关文章推荐
- JAVA命名规则
- java17天
- java单例-积木系列
- 关于Java中形参与实参的理解
- java之 构造方法
- java中的内部类总结
- JavaWeb分页技术总结
- Java 1.7 ThreadPoolExecutor源码解析
- 学习笔记——java关键字
- Field 的使用,遍历对象的属性
- spring的生命周期(参考)
- Java 1.7 ReentrantLock源码解析
- Java Web 通过CKEditor实现在线编译器
- Java中对象与引用
- struts2配置基础和常见错误
- Java积累
- Java clone() 浅克隆与深度克隆
- 学习javaEE每一天2016.4.1
- Java编程思想篇
- eclipse下maven项目出现红色感叹号