Эта программа будет работать нормально, если я не включу флаг досрочного завершения, но для полной сортировки списка требуется только 10 проходов сортировки, а не все 12. Однако, когда включен флаг завершения, сортировка завершается слишком рано. Следуя логике, я вижу, что это происходит потому, что после третьего прохода массив упорядочивается так:
с индексом i, который в настоящее время равен 7, нет меньших значений для его замены, поэтому флаг не получает назначенного ему значения 1, и цикл завершается. Итак, я думаю, мой вопрос в том, можно ли выйти из алгоритма сортировки выбором раньше и при этом полностью завершить сортировку?
#include<stdio.h>
int main()
{
int list[13]= {23,8,4,7,22,18,39,42,5,88,16,11,3};
int temp,min,flag;
printf( "Before Sorting\n" );
printf( "23 8 4 7 22 18 39 42 5 88 16 11 3\n" );
for( int i=0; i<12; i++ )
{
flag = 0;
min = i;
for( int j=i+1; j<13; j++ )
{
if( list[j]<list[min] )
{
flag = 1;
min = j ;
}
}
if( !flag )
break;
temp = list[i];
list[i]=list[min];
list[min]=temp;
printf( "\nAfter Pass %d.\n",i+1 );
for( int i=0; i<13; i++ )
printf( "%d ",list[i] );
printf( "\n" );
}
return 0;
}