Search code examples
calgorithmsortingselection-sort

Selection Sort in C is not showing the right output


#include <stdlib.h>
#include <stdio.h>


void selection_sort(int array[],int num);

int main(void) {

    int i,num;

    printf("Write the number of elements :");
    scanf("%d",&num);

    int array[100];

    for(i=0;i<num;i++){

        scanf("%d",&array[i]);
    }

    selection_sort(array,num);

    return 0;
}

//Doing selection sort algorithm :

void selection_sort(int array[],int num){

    int i,j,min,temp;

    for (i=0;i<num;i++){

        min=i;

        for(j=i+1;j<num;j++){

            if (array[j]<array[i]){

                min=j;
            }
        }

        if (min!=i){

            temp=array[i];
            array[i]=min;
            min=temp;
        }
    }

    printf("Sorted elements :\n");

    for (i=0;i<num;i++){

        printf("%d\n",array[i]);
    }


}

please let me know why i am unable to display the sorted elements


Solution

  • The problem was with the part how swap is implemented.

    The correct way to swap the elements is:

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

    Look at the following corrected code:

    #include <stdlib.h>
    #include <stdio.h>
    
    
    void selection_sort(int array[],int num);
    
    int main(void) {
    
        int i,num;
    
        printf("Write the number of elements :");
        scanf("%d",&num);
    
        int array[100];
    
        for(i=0;i<num;i++){
    
            scanf("%d",&array[i]);
        }
    
        selection_sort(array,num);
    
        return 0;
    }
    
    //Doing selection sort algorithm :
    
    void selection_sort(int array[],int num){
    
        int i,j,min,temp;
    
        for (i=0;i<num;i++){
    
            min=i;
    
            for(j=i+1;j<num;j++){
    
                if (array[j]<array[i]){
    
                    min=j;
                }
            }
    
            if (min!=i){
    
                temp=array[i];
                array[i]=array[min];
                array[min]=temp;
            }
        }
    
        printf("Sorted elements :\n");
    
        for (i=0;i<num;i++){
    
            printf("%d\n",array[i]);
        }
    
    
    }