我正在学习关于数据结构的课程,并且教师给出了以下用于选择排序的代码。但我认为这是不正确的,因为在选择排序中,我们扫描整个数组并在每次迭代中查找最小元素,用它的正确位置交换它。但是在下面的代码中,我们每次都交换,我们发现一个比当前元素小的元素。所以请让我知道这是否正确。下面的选择排序代码是否正确?
public static void selectionsort(int[] listtosort)
{
for (int i=0; i<listToSort.length; i++)
{
for (int j=i+1; j<listToSort.length; j++)
{
if (listToSort[i] > listToSort[j])
{
swap(listToSort, i, j);
print(listToSort);
}
}
}
}
但我们一定会被其最坏的情况下测量算法的演出]吧?互换的数量将是O(N^2)在最坏的情况下scenario.Also它带走的是选择排序有较少数量的事实与插入排序进行比较时的交换。 –
我的意思是在我刚才提到的代码中,在最坏的情况下,交换次数是0(N^2)? –
是的,他们不改变'大O'的表现但是,如果在内存写入比读取像比如说闪存更昂贵的交换数量变得重要的权利? –