快速排序(quickSort)
简介:在数据序列中选择一个元素作为基准值,每趟从数据序列的两端开始交替进行,将小于基准值的元素交换到序列前端,将大于基准值的元素交换到序列后端,介于两者之间的位置则成为基准值的最终位置。同时,序列被划分成两个子序列,再分别对连个子序列进行快速排序,知道子序列长度为1,完成排序。
下面展示 快排代码。
private static void quickSort(int[] keys,int beign,int end){
if( beign < end ){ // 序列有效
int i = beign; // 保存子序列的前端 , 指针1
int j = end; // 保存子序列的后端 , 指针2
int p = keys[i]; // 支点
while ( i < j ){ // 当序列有效时
while ( i < j && keys[j] > p ){ // 当keys[j] > p 时候, j--
j--;
}
if( i < j ){ // 如果 i<j 依旧,也就是 ----keys[j] < p
keys[i++] = keys[j]; // 那么在i处保存这个值, i++;
}
while ( i < j && keys[i] < p ){ // 同理
i++;
}
if( i < j ){
keys[j--] = keys[i];
}
}
keys[i] = p; // keys[i] = p; 基准值达到最终位置
quickSort(keys,beign,j-1); // 前端子序列再排序,递归调用
quickSort(keys,i+1,end); // 后端子序列再排序,递归调用
}
}
两个指针,一个支点,寻找交换值
136

被折叠的 条评论
为什么被折叠?



