我正在学习数据结构课程,教师为选择排序提供了以下代码。但我认为这是不正确的,因为在选择排序中,我们扫描整个数组并在每次迭代中找到最小元素并将其与正确的位置交换。但在下面的代码中,我们每次都交换,我们找到一个小于当前元素的元素。所以请告诉我这是否正确。
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);
}
}
}
}
答案 0 :(得分:0)
你是对的。您可以存储较小数字的索引,而不是在每次遇到较小数字时进行交换,而在内部迭代结束时,您可以将当前数字与最小数字交换。但是,这种方法不会影响此排序算法的复杂性。两者都是O(n ^ 2)。如果数字较小,则交换为O(1)。如果数字较小,则其索引再次为O(1)。
public static void SelectionSort ( int [ ] num ) {
int i, j, first, temp;
for ( i = num.length - 1; i > 0; i - - ) {
first = 0; //initialize to subscript of first element
for(j = 1; j <= i; j ++) {
if( num[ j ] < num[ first ] )
first = j;
}
temp = num[ first ]; //swap smallest found with element in position i.
num[ first ] = num[ i ];
num[ i ] = temp;
}