Java:【快速排序优化】与线性时间选择结合
发布日期:2021-05-06 07:33:01 浏览次数:14 分类:技术文章

本文共 1120 字,大约阅读时间需要 3 分钟。

快排在最坏情况下复杂度会达到O(n^2),需要进行优化。

:可以使每次的基准前后序列长度都大致相同,避免最坏情况的发生,所以需要使用一个线性级别的算法来找出序列的中位数:select线性时间选择算法。

实现源码:

package Keshe;import java.util.Arrays;public class Test {    private static Comparable[] bubble(int left, int right, Comparable []arr){  //冒泡排序,每次调用只起一次泡        Comparable temp;        for(int j=left;j
0); if(i>=j){ arr[p] = arr[j]; arr[j] = (int)x; break; } swap(arr,i,j); } return j; } public static void swap(Comparable[] arr, int i, int j) { Comparable temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void main(String[] args) { long a=System.nanoTime(); Test s = new Test(); Comparable[] arr = { 11, 3, 29, 49, 30, 7, 50, 63, 46, 1, 99 }; System.out.println("未排序的数组:" + Arrays.toString(arr)); s.select(0, arr.length - 1,arr.length/2,arr); System.out.println("排序后的数组:" + Arrays.toString(arr)); System.out.print("运行时间:"); System.out.println(System.nanoTime()-a+"纳秒"); }}

原先的快排运行时间大概在100万纳秒左右,优化后达到50万左右

上一篇:Java:class4 类和对象
下一篇:Java:class3 一维、二维数组

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月06日 05时28分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章