您的位置:首页 > 编程语言 > Java开发

排序算法之快速排序-Java-version

2016-08-03 14:40 267 查看

排序算法之快速排序-Java-version

快排采用分治的思想,具有效率高,速度快,但不稳定,适用于数据规模不是很大的数据,其平均时间复杂度是o(nlogn)。

基本思路:一趟快排主要为了定位一个元素在数据有序后的最终位置,按照这个思路我们再来观察快排的过程,就能够理解其算法。我们首先找到一个基准元素,理论可以随机,但为了方便一般选取第一个,以此为基础,我们一趟快排的目的是找出比这个基准都大的数和都小的数,将小的数扔到左边,都大的数扔到右边。

/*
*快速排序
*o(nlogn)
*/
public static void quickSort(int a[]){
if(a.length>0)
fastSort(a,0,a.length-1);
}

public static void fastSort(int a[],int low,int high){
if(low<high){
int mid=getMiddle(a,low,high);//得到基准元素的位置
fastSort(a,0,mid-1);          //基准左边递归
fastSort(a,mid+1,high);       //基准右边递归
}
}
public static int getMiddle(int a[],int low,int high){
//取第一个元素作为基准,且使用temp来暂存基准元素的值
int temp=a[low];
while(low!=high){
//从右往左找比基准小的元素
while(low<high&&a[high]>=temp)
high--;
//放入比基准大的数,此时high的位置为空,准确来说是被覆盖
a[low]=a[high];
//从左往右找比基准大的数,放入high的位置
while(low<high&&a[low]<=temp)
low++;
a[high]=a[low];
}
a[low]=temp;
return low;
}
/*
*by JacFrak
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐