快速选择排序算法
/**
* 快速排序算法
* 通过一趟排序将数据分成两部分 , 其中一部分的数据要比
* 另外一部分小或大 , 利用递归进行 , 直至数据有序
* 算法步骤 :
* 1.定义两个指针分别指向低位和高位
* 2.将数组第一个元素作为基数
* 3.从后往前遍历(high--) , 直至找到第一个小于key的值
* 4.从前往后遍历(low++) , 直至找到第一个大于key的值
* 5.重复 3 , 4步骤
* PS:3,4步骤是一个前后交替不断靠拢的一个过程
* @param a 数组
* @param low 低位
* @param high 高位
*/
public static void sort(int[] a, int low, int high) {
int i = low;
int j = high;
if (i >=j) {
return;
}
int key = a[low];
int temp = 0;
while(i < j){
while(i < j && key <= a[j])
j--;
if (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
}
while(i <j && key >= a[i])
i++;
if(i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
j--;
}
}
sort(a,low,i-1);
sort(a,i+1,high);
}