算法本质
快排属于交换排序,快排的基本思想是基于分治的。快排的本质就是通过一趟排序将基准数排到最终的位置。即以基准数为中心将待排序的序列划分成两个子序列,一个子序列是基准数前面的数,都比基准数小;一个子序列是基准数后面的数,都比基准数大。然后递归的对两个子序列重复上述过程。即所有元素都在最终位置上
tips:快排里的基准数也可以理解枢轴,通常取首元素,也可尾元素。
tips:一趟排序也可叫为一次划分。
算法思路
1.左右各有一个指针,首元素作为基准数
2.左侧指针不断右移,右指针也不断左移,将左边比基准数大的数和右边比基准数小的数交换,直到两个指针重合,基准数归位指针重合的位置。成功将表以基准数为中心一分为二
3.然后两个子表递归执行上述过程
代码
首元素作为基准数
public class MyQuiteSortDemo {
public static void main(String[] args) {
int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
quickSort(arr,0,arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void quickSort(int[] arr, int left, int right) {
if(right < left){
return;
}
int left0 = left;
int right0 = right;
int baseNumber = arr[left0];
while(left != right){
while(arr[right] >= baseNumber && right > left){
right--;
}
while(arr[left] <= baseNumber && right > left){
left++;
}
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
int temp = arr[left];
arr[left] = arr[left0];
arr[left0] = temp;
quickSort(arr,left0,left-1);
quickSort(arr,left +1,right0);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)