选择排序实现,我坚持计算交换次数的时间复杂度

时间:2017-01-21 06:50:34

标签: time-complexity selection-sort

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)复杂度。

1 个答案:

答案 0 :(得分:0)

  

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

从逻辑上讲,这取决于你所做的是正确的。它使用&#34;在数组中找到最大/最小值&#34;。但是,在Selection Sort中,通常你在一次迭代中不需要多次交换。您只需在数组中保存最大/最小值,然后在最后将其与第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次交换,你的迭代也应该改变。