首页 > 编程知识 正文

写出快速排序算法java,快速排序流程图表示

时间:2023-05-05 05:04:32 阅读:21423 作者:4629

1 .经典快速排序图标流程

(1)经典快速排序的总体流程

)2)按标准值划分的流程

2 .随机快速排序

在典型的快速排序中,始终将数组或某个部分的最后一个元素指定为参考值,而在随机快速排序中,将指定数组或某个部分的随机值指定为参考值。

3 .动图展示

quickSort.gif

随机快速排序Java代码实现

//*

*用于有序排序整数数组arr的快速排序

*/

公共服务语音quicksort (int [ ] arr )。

if(arr==null||arr.length2) {

返回;

}

快速排序(arr,0,arr.length - 1 );

}

//*

*快速排序,使整数数组arr的[L,R]部分有序

*/

publicstaticvoidquicksort (int [ ] arr,int L,int R ) {

if(LR ) {

//用最后一个元素交换数组中的随机元素。 如此,将最后的要素设为基准值,实际上将数组中的随机要素设为基准值

swap(arr,new Random ).nextint(r-L1 ) l,r );

int[]p=partition(ARR,l,r );

快速排序(arr,l,p[0] - 1 );

快速排序(arr,p[1] 1,r );

}

}

//*

*分区过程,在整数数组arr的[L,R]部分,您可以:

大于arr[R]的元素位于[L,R]部分的右侧,但这部分数据不一定有序

小于arr[R]的元素位于[L,R]部分的左侧,但该部分的数据不一定有序

与arr[R]相等元素位于[L,R]部分的中间

*返回由部分第一个元素的下标和最后一个下标组成的整数数组

*/

公共静态int [ ] partition (int [ ] arr、int L、int R ) {

int basic=arr[R];

int less=L - 1;

int more=R 1;

wile(Lmore ) {

if(ARR[L]basic ) {

swap(arr,less,l );

}elseif(ARR[L]basic ) ) )

swap(arr、--more、l );

} else {

L;

}

}

返回新int [ ] { less 1,more - 1 };

}

/*

*在交换数组arr中,下标为I、下标为j的位置的要素

*/

publicstaticvoidswap(int[]arr,int i,int j ) {

int temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

5 .复杂性

时间复杂性: o(nlogn ) )

空间复杂度:快速排序使用递归,递归使用堆栈,因此空间复杂度为o(logn )

稳定性:快速排序是一种不稳定的排序算法,因为它不保证同一元素的相对位置不变

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。