Эта программа будет работать нормально, если я не включу флаг раннего завершения, но для полной сортировки списка требуется всего 10 проходов сортировки, а не полный 12. Однако, если включен флаг завершения, она также завершает сортировку рано. Следуя логике, я вижу, что это происходит, потому что после третьего прохода массив упорядочен так:
![enter image description here](https://i.stack.imgur.com/qe83r.png)
с индексом 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;
}