Для начала оба подхода неэффективны, поскольку имеются избыточные перестановки элементов массива.
Во второй программе вместо использования в теле внешнего l oop оператора
min=arr[i];
вы используете
min=arr[0];
В этом l oop
printf("sorting array is : \n");
for(i=0;i<=10;i++)
{
printf(" %d \n",min); // as i put value of min in i
}
вы всегда выводите последнее значение переменной min
вне циклов, которые сортируют массив. , Также не рекомендуется использовать магические числа c, такие как 10
.
. И объявлять переменные в наименьшей области, где они используются.
Программа может выглядеть следующим образом way
#include <stdio.h>
int main( void )
{
int arr[] = { 7, 12, 4, 28, 3, 15, 7, 3, 89, 1, 12 };
const size_t N = sizeof( arr ) / sizeof( *arr );
printf( "Unsorted array: " );
for ( size_t i = 0; i < N; i++ )
{
printf(" %2d ", arr[i] );
}
putchar( '\n' );
for ( size_t i = 0; i < N; i++ )
{
size_t min_i = i;
for ( size_t j = i + 1; j < N; j++ )
{
if ( arr[j] < arr[min_i] ) min_i = j;
}
if ( min_i != i )
{
int tmp = arr[i];
arr[i] = arr[min_i];
arr[min_i] = tmp;
}
}
printf( "sorted array: " );
for ( size_t i = 0; i < N; i++ )
{
printf(" %2d ", arr[i] );
}
putchar( '\n' );
return 0;
}
Его вывод
Unsorted array: 7 12 4 28 3 15 7 3 89 1 12
sorted array: 1 3 3 4 7 7 12 12 15 28 89