Застрял в этом алгоритме выбора сортировки - PullRequest
0 голосов
/ 02 мая 2020

Я просто не могу найти никакой ошибки в моем коде для сортировки выбора, но массив выходит как несортированный. Мне нужна помощь. Также по какой-то причине число '0' появляется в качестве результата при каждой попытке, даже если во введенном массиве нет нуля. Я не могу понять ошибку

#include<stdio.h>
int main(){
  int size;
  printf("Enter the number of elements of the array : ");
  scanf("%d",&size);
  int arr[size];
  printf("Enter the elements :");
  for(int i=0;i<size;i++){
    scanf("%d",&arr[i]);
  }
  int min,temp,j,i;
  for(i=0;i<size-1;i++){
    min=i;
    for(j=i+1;j<size;j++){
      if(arr[j]<arr[min]){
        min=j;
      }
    }
    temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
  }
  printf("Sorted array is : \n");
  for(int i=0;i<size;i++){
    printf("%d\n",arr[i]);
  }
  return 0;
}

1 Ответ

0 голосов
/ 02 мая 2020

Этот фрагмент кода, который заменяет два элемента массива

temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;

, неверен. Вам нужно написать

temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;

Также было бы лучше написать

if ( i != min )
{
    temp=arr[i];
    arr[i]=arr[min];
    arr[min]=temp;
}

Обратите внимание на то, что вы должны объявлять переменные в минимальной области видимости, где они используются.

Ваша программа может выглядеть следующим образом

#include <stdio.h>

int main( void )
{
    size_t n;

    printf( "Enter the number of elements of the array: " );

    scanf( "%zu", &n );

    int arr[n];

    printf( "Enter the elements: " );
    for ( size_t i = 0 ; i < n; i++ )
    {
        scanf( "%d", arr + i );
    }

    for ( size_t i = 0; i < n; i++ )
    {
        size_t min = i;

        for ( size_t j = i + 1; j < n; j++ )
        {
            if ( arr[j] < arr[min] ) min = j;
        }

        if ( i != min )
        {
            int temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }           
    }

    printf( "Sorted array is: " );

    for ( size_t i = 0; i < n; i++ )
    {
        printf( "%d ", arr[i] );
    }
    putchar( '\n' );

    return 0;
}

Вывод может выглядеть как

Enter the number of elements of the array: 10
Enter the elements: 3 6 5 1 2 9 0 8 4 7
Sorted array is: 0 1 2 3 4 5 6 7 8 9 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...