java中的递归冒泡排序TLE

问题描述 投票:0回答:1

我已经编写了代码来进行冒泡排序递归。但我超出了时间限制。谁能帮我弄清楚为什么我超出了时间限制。

public static void bubbleSort(int[] arr,int index,int j){
        if(index==arr.length) return;
        if(j==arr.length-1) return;
        if(arr[j]>arr[j+1]){
            int temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
        bubbleSort(arr,index,j+1);
        //print(arr);
        bubbleSort(arr,index+1,0);
    }

函数调用: bubbleSort(arr,0,0);

我不明白为什么我会超出时间限制

java algorithm sorting bubble-sort
1个回答
1
投票

每个函数执行上下文不应该有两个递归调用,而应该只有一个。否则,递归调用的次数是指数 O(2𝑛),而您只需要 O(n²) 次

bubbleSort
的调用。

使用

if
条件来决定您需要两个递归调用中的哪一个:

    if (j < arr.length - 2) {
        bubbleSort(arr,index,j+1);
    } else {
        bubbleSort(arr,index+1,0);
    }

你甚至可以让条件更严格一点,因为在冒泡排序的每个阶段,数组末尾的已排序分区都会增长:

    if (j < arr.length - 2 - index) {

您还可以删除

j
上的停止条件。

© www.soinside.com 2019 - 2024. All rights reserved.