package cn.xiaobo.QuickSort;html
/**
* 快速排序的思想:选准一个基准点;通常拿数组的第一个元素做为基准点;
* 而后选取两个指针;i=left;j=right;两边进行;小于基准点的放在左边;大于放在右边;
* 最后i=j;将基准点的值给arr[i];
* 再如下标i为界限依次进行递归;不要忘记跳出递归的条件是i=j;
* 参考博客:https://www.cnblogs.com/foreverking/articles/2234225.html
* 他的源程序我作了点改动;
* @author Administrator
*
*/
public class QuickSortMain {
public static void main(String[] args) {
int[] arr=new int[10];
// for(int i=0;i<10;i++){
// arr[i]=10-i;
// };
arr[3]=67;
arr[4]=76;
arr[5]=99;
arr[6]=64;
arr[1]=2;
arr[0]=1;
arr[2]=6;
QuickSortApp quickSortApp=new QuickSortApp();
System.out.print("排序前:");
for(int i=0;i<10;i++){
System.out.print(arr[i]+" ");
};
quickSortApp.Sort(arr, 0, 9);
System.out.print("排序后:");
for(int i=0;i<10;i++){
System.out.print(arr[i]+" ");
};
}数组
}ui
package cn.xiaobo.QuickSort;spa
public class QuickSortApp {.net
public void Sort(int[] arr,int _left,int _right) {
int left=_left;
int right=_right;
//递归的临界点是左边边界等于右边边界;
if(left<right){
//最后的结果必定是左边的下标等于右边的下标
//选取基准点
int temp=arr[left];
while(left!=right){
//先从right开始搜索,当搜索到比temp小时,跳出循环
while(left<right&&arr[right]>temp){
right--;
}
//arr[left]的值给了temp,因此先把arr[right]给arr[left]
//多出一个空位
if(right>left){
arr[left]=arr[right];
}
//循环中找到比temp大的值;
while(left<right&&arr[left]<=temp){
left++;
}
//左边搜索到了比temp大的值,放在右边空缺的位置
if(right>left){
arr[right]=arr[left];
}
}
//把基准值给最后一个;
arr[left]=temp;
//再对两边进行递归,因为arr[i]已是排好序的,因此不用加入;
Sort(arr,_left,left-1);
Sort(arr,right+1,_right);
}
}
}指针