【问题标题】:Selection sort implementation, I am stuck at calculating time complexity for number of swaps选择排序实现,我一直在计算交换次数的时间复杂度
【发布时间】:2017-06-06 04:52:16
【问题描述】:
static int count = 0;
for (int i = 0; i < arr.length; i++) {
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[i] > arr[j]) {
            swap(arr, i, j);
            count++;
        }
    }
}

这是选择排序的正确实现吗?使用此实现进行交换时,我没有得到 O(n-1) 复杂度。

【问题讨论】:

    标签: time-complexity selection-sort


    【解决方案1】:

    这是选择排序的正确实现吗?

    这取决于,从逻辑上讲,您所做的是正确的。它使用“查找数组中的最大值/最小值”进行排序。但是,在选择排序中,通常您在一次迭代中不需要多次交换。您只需将最大/最小值保存在数组中,然后最后将其与第 i 个元素交换

    我没有得到 O(n-1) 的交换复杂度

    你的意思是 n-1 次交换吗?是的,它发生是因为您每次交换时不仅在最大值上找到更大的值。您可以尝试像这样重写您的代码:

    static int count=0;
    static int maximum=0;
    for(int i=0;i<arr.length-1;i++){
        maximum = i;
        for(int j=i+1;j<arr.length;j++){
            if(arr[j] > arr[maximum]){
                maximum = j;
            }
        }
        swap(arr[maximum],arr[i]);
        count++;
    }
    

    另外,如果你想精确地交换 n-1 次,你对 i 的迭代也应该改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-31
      • 2019-10-20
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 2015-06-15
      相关资源
      最近更新 更多