排序算法之快速排序

快速排序介绍:

快速排序四对冒泡排序一种改进。基本思想是:通过一趟排序将要排序 的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再按照此方法对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

 

代码:

package com.gcy.sort;

import java.util.Arrays;

/**
* 快速排序
* @author Administrator
*
*/
public class QuickSort {

public static void main(String[] args) {
int [] arr= {-9,78,0,23,-567,70};
quickSort(arr, 0,arr.length-1);
System.out.println(Arrays.toString(arr));

}
public static void quickSort(int [] arr,int left,int right) {
int l=left;//左下标
int r=right;//右下标
int povit=arr[(left+right)/2];//中轴值
int temp=0;
//while循环目的是让比povit小的值再左边,比povit大的值在右边
while(l<r) {
//在povit的左边一直找,直到找到比povit大的值就退出
while(arr[l]<povit) {
l+=1;
}
while(arr[r]>povit) {
r-=1;
}
//如果l>=r说明povit左右两边的值, 已经按照左边全部是小于等于povit值的数,右边全是大于等于povit值的数
if(l>=r) {
break;
}
//交换
temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;

//如果交换完毕后发现arr[l]==povit,r--
if(arr[l]==povit) {
r-=1;
}
//如果交换完毕后发现arr[r]==povit,l++
if(arr[r]==povit) {
l+=1;
}
}
//如果l==r,必须l++;r--,否则会出现栈溢出
if(l==r) {
l+=1;
r-=1;
}
//向左递归
if(left<r) {
quickSort(arr, left, r);
}
//向右递归
if(right>l) {
quickSort(arr, l,right);
}
}

}

结果:

有兴趣的小伙伴可以测试一下其排序速度,在数据足够多的情况下快速排序的速度是要快于插入排序的

posted @ 2020-10-05 21:43  IT特工  阅读(127)  评论(0编辑  收藏  举报