快速排序QuickSort
算法思路:
- 给定的数组,选择一个元素作为枢轴,所有比枢轴小的元素放在枢轴的左侧,比枢轴打的元素放在枢轴的右侧;
- 根据以上思路,递归地分别操作小于枢轴值的序列 和 大于枢轴值的序列,最终会排序完成;
动图演示:

图示中 黄色 柱代表的是枢轴
JAVA代码实现:
public class QuickSort {
public static void quickSort(int[] arr,int low, int high){
int i=low;
int j=high;
int index = arr[low];
if (low>=high)//快速排序中,此条件语句不可少,否则会引起StackOverFlowError
return;
while (i<j){
while(i<j &&arr[j]>index){//从右往左找到第一个小于枢轴的元素
j--;
}
while(i<j && arr[i]<=index){//从左向右找到第一个大于枢轴的元素
i++;
}
if(i<j){//大于枢轴的元素和小于枢轴的元素交换
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
arr[low]=arr[i];//调整枢轴的位置
arr[i]=index;//调整枢轴的位置
/* for(int e:arr)
System.out.println(e);*/
quickSort(arr,low,i-1);//递归左侧子序列
quickSort(arr,i+1,high);//递归右侧子序列
}
public static void main(String[] args) {
int[] a ={8,4,5,9,0,3,2,6,1,7};
quickSort(a,0,a.length-1);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
三人行,必有我师焉。欢迎指正