Java实现快速排序
package example;
import java.util.Arrays;
public class QuickSort {
int[] arr = null;
void quickSort(){
quickSortdetail(0,this.arr.length-1);
}
void quickSortdetail(int l,int r){
//两个指针
int left = l;
int right = r;
//递归头,当左、右指针交叉时,即右指针与左指针重叠或在左指针的左边时,返回
if(left>=right) {
return;
}
//建立临时变量,存放坐标
int temp = this.arr[left];
//循环,直到两个指针指向相同元素
while (left!=right){
//循环遍历,从右侧开始,当找到第一个比坐标小的值时
while (this.arr[right]>=temp&&left!=right){
right--;
}
//将右指针的值赋给左指针,切换到左侧遍历
this.arr[left] = this.arr[right];
//循环遍历,从左侧开始,当找到第一个比坐标大的值时
while (this.arr[left]<temp&&left!=right){
left++;
}
//将左指针的值赋给右指针,切换到右侧遍历
this.arr[right] = this.arr[left];
}
//将坐标值赋给当前元素
this.arr[left] = temp;
//在坐标左侧全是比坐标小的值,右侧全是比坐标大的值,递归调用自身,完成左右两个数组的排序
//需要注意的时,这里与传统二分法不同,坐标点已经是排序完毕了,所以需要把坐标点让出来
quickSortdetail(l,left-1);
quickSortdetail(right+1,r);
}
public QuickSort(int j) {
this.arr = new int[j];
for (int i = 0; i < j; i++) {
this.arr[i] = (int)(Math.random()*10);
}
}
public static void main(String[] args) {
QuickSort qs = new QuickSort(10);
System.out.println(Arrays.toString(qs.arr));
qs.quickSort();
System.out.println(Arrays.toString(qs.arr));
}
}