public static void main(String[] args) {
int[] array={49,38,65,97,76,13,27,50,78,34,12,64,1};
myQuickSort(array,0,array.length-1);
System.out.println("排序之后:");
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
/**
* 快排,是递归的,一个数组先进行一次轴划分成两个区,
* 然后以轴为中心把左边的和右边都认为是一个新的数组再次进行快排
* @param array
* @param low
* @param hight
*/
public static void myQuickSort(int[] array,int low,int hight){
if(low<hight){
int axis = myFirstQuickSort(array, low, hight);//进行第一轮排序
myQuickSort(array,axis+1,hight);//右边认为是一个新的数组,进行快排
myQuickSort(array,low,axis-1);//左边的认为是一个新的数组,进行快排
}
}
/**
* 这只是一个数组快速排序的第一轮,目标是在low和higth之间,由low的值key作为轴,小于key的放到前面,大于的放到后面
* 当low==hight时就比较完了,也是最后key的位置
*
* 由于初始化时key=low.value,所以先从hight开始,如果key小于hight.value直接移动指针,否则就直接交换位置,
* 这个时候先把low指针后移,然后在开始比较,防止low==hgith的情况
*
* 和上段类似
* key再值交换时不用进行赋值,因为key是不变得,而且这个值肯定会被hight位或者low位,再或者本位替换掉
* 返回轴最后的位置,后面轴的左边和右边都会再次进行排序
*
* @param array
* @param low
* @param hight
*/
public static int myFirstQuickSort(int[] array,int low,int hight){
int key=array[low];
while (low<hight){
while (low<hight && key<array[hight]){
hight--;
}
array[low]=array[hight];
low++;
while (low<hight && key>array[low]){
low++;
}
array[hight]=array[low];
hight--;
}
array[low]=key;
return low;
}
来源:CSDN
作者:dalong_bamboo
链接:https://blog.csdn.net/dalong_bamboo/article/details/103800224