-
快速排序
快速排序是对冒泡排序的一种改进。
首先,找出一个基准值,然后将元素中比这个基准值小的放在基准值左边,比基准值大的元素放在基准值右边。这样一趟排序下来,基准值左边的元素都比基准值小,基准值右边的元素都比基准值大。
然后在用同样的方法,分别对左边元素和右边元素递归地进行排序,最终使整个序列有序。 -
这里,我选中间元素为基准值,我将从序列两端进行遍历,从左边遇到一个比基准值大的元素便停下,从右边遇到一个比基准值小的元素也停下,然后将两个元素交换位置。但是在遍历过程中,如果遍历到同一个元素时,就可以退出遍历了,因为此时左右两边都已经满足小于或者大于基准值了。交换之后还要判断当前元素是否是基准值,如果左边当前元素为基准值,接下来判断右边元素即可;右边同理。
-
代码如下
public class QuickSort {
public static void main(String[] args) {
int[] array = {-9,78,0,23,-567,70,-1900,4561};
quickSort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
public static void quickSort(int[] array, int left, int right){
int l = left;
int r = right;
int pivot = array[(left+right)/2];
int temp = 0;
while (l<r){
//找到数组中pivot元素位置之前的,比pivot元素大的数
while (array[l]<pivot){
l = l+1;
}
//找到数组中pivot元素位置之后的,比pivot元素小的数
while (array[r]>pivot){
r = r-1;
}
//如果l>=r,说明pivot元素两边已经满足要求
if (l>=r){
break;
}
//找到之后,将他们交换
temp = array[l];
array[l] = array[r];
array[r] = temp;
//如果array[l] == pivot,pivot左边的元素已经都比pivot小了
//但是右边的元素还需要再判断的
if (array[l] == pivot){
r--;
}
//原理同上
if (array[r] == pivot){
l++;
}
}
if (l==r){
l++;
r--;
}
if (left<r){
quickSort(array,left,r);
}
if (l<right){
quickSort(array,l,right);
}
}
}
- 此为学习笔记
来源:CSDN
作者:Willow_zhu
链接:https://blog.csdn.net/Willow_zhu/article/details/104904154