思路
简单来,快速排序有以下几步:
1.确定数组中任意一个值作为key值,用于比较,一般用第一个值(例如数组{5,4,6,3,2,7},令key=5);
2.从数组的起始点以及终点开始分别交替进行比较,即先从右向左找第一个比key小的值,与key的位置对换,并记录当前这个值的位置low(low=0,hight=4,key=5,交换后{2,4,6,3,5,7});
3.换了一次之后开始从左往右找第一个比key大的值,与key值对换位置,并记录当前这个值的位置hight,(low=2,hight=4,key=5,交换后{2,4,5,3,6,7})这样称为一次循环,由于low
private static void fastSort(int[] arr,int begin,int end)
{
int low=begin;//记录左边上一次比较数的位置
int hight=end;//记录右边上一次比较数的位置
int key=arr[low];//指定一个key值
int temp=0;
while(low<hight)
{
while(key<=arr[hight] && low<hight)
{
hight--;//从右开始,比key大就不管,将hight减一
}
if(arr[low]>arr[hight])//找到一个在key的右边且比key小的值就对换位置
{
temp=arr[low];
arr[low]=arr[hight];
arr[hight]=temp;
}
while(key>=arr[low] && low<hight)
{
low++;//从左往右,比key小就不管,low值加一
}
if(arr[low]>arr[hight])//找到一个在key左边且值比key大的就对换
{
temp=arr[low];
arr[low]=arr[hight];
arr[hight]=temp;
}
}
if(low>begin){fastSort(arr,begin,low-1);}//数组中key值前部分作为新的子数组队规调用
if(end>hight){fastSort(arr,hight+1,end);}//后部分
}