java中的快速排序
程序员文章站
2022-03-16 19:19:40
...
快速排序优点:相对于冒泡排序、选择排序、插入排序,在处理数据较多的情况下,更加省时、迅速
快速排序原理(以数组、升序为例):创建一个方法,升序排序数组
选择数组第一个数为临界值A,再从数组最后一位开始往左找,依次寻找,找到第一个比临界值小的。如果没有找到比临界值小的,那么临界值A最小,位置确定在数组第一位,该数字的右边都是比他大的数字,再调用方法,将该数组中剩余的数字进行排序。如果找到了比临界值小的数B,那么再从临界值的位置开始往右找,找到第一个比临界值大的数,如果直到找到了B的位置,也没找到比A大的数,A的位置确定,那么A与B互换位置,那么临界值与上述找到的最小值换换位置;如果找到了比A大的数C,那么将B与C互换位置,在继续从C的位置往左找下一个比A小的数,在从B的位置往右找下一个比A大的数,最终会确定A的位置,A的左边都是比它小的数,右边都是比它大的数,以A的位置为分隔,数组分成两个部分,在分别调用方法对着两个部分排序。
集体实现代码如下:
import java.util.Arrays;
public class QuickSort {
//快速排序,相对于冒泡排序,更加省时、迅速。
public void sort(int[] array,int left,int right){
int l,r; //用于储存左右索引的值
//left为数组array左边的索引值,其对应的值为临界值,right为数组右边的索引值
if(left>right){return;}
l=left;
r=right;
while(l<r){
while(array[left]<=array[r]&&l<r){r--;}//从右边开始往左找到一个比临界值小的数,否则r自减
while(array[left]>=array[l]&&l<r){l++;}//从左边开始往右找到一个比临界值小的数,否则l自加
if(r>l){
int temp01=array[r];
array[r]=array[l];
array[l]=temp01;
}else if(r==left){break;}
else{
int temp02=array[l];
array[l]=array[left];
array[left]=temp02;
}
}
sort(array,left,l-1);//左边部分
sort(array,l+1,right);//右边部分
}
public static void main(String[] args) {
//创建对象
QuickSort q=new QuickSort();
//静态创建数组
int[] array={23,16,18,19,54,16,10,47,28,1,9,85,9};
System.out.println("原始数组:"+Arrays.toString(array));
//利用对象调用排序方法
q.sort(array,0,array.length-1);
System.out.println("排序后数组:"+Arrays.toString(array));
}
}
执行结果如下:
上一篇: web前端之css水平居中代码解析