I am getting unexpected results from my bubble sort program in C. The program below is a program which takes 5 inputs from the user, performs selection sort on them, then performs exchange sort on them.
If i use these inputs:
50
150
75
175
23
It should sort them to the following:
23
50
75
150
175
However, it doesnt sort correctly and sorts like the following (opposite way around for exchange as it does it in Descending order):
150
175
23
50
75
Its quite strange because if you enter certain values it will sort them correctly such as:
73
84
03
26
83
Not quite sure whats going on with it. I cant start making changes to it when it technically works for certain values.
I must be missing something somewhere.
Any help would be appreciated.
CODE IN FULL:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int main(int argc, char *argv[])
{
    char    arc5Strings[5][256];
    int nCount, nCount2, nCount3, nCount4, nCount5, nCount6, nCount7, letter, sorted;
    int fMinVal[1][2] = {1,1};
    int nMinValPosition;
    int nMoves;
    int nRow;
    int i, j, k, indexOfCurrentSmallest, q, temp;
    char    arcTemp[256];
    int nOutOrder;
    int nNumValues;
    int clean1, clean2;
    //input the values
    for(nCount=0; nCount < 5; nCount++)
    {
        printf("Please input string %d/5: ", nCount + 1);
        fgets(arc5Strings[nCount], 256, stdin);
            if(strlen(arc5Strings[nCount]) > 11)
            {
                printf("Your string contains more than 10 characters. Please try again.");
                nCount = 5;
                exit(0);
            }
    }
    //------------------------------------------------------------------------------
    //Selection Sort
    printf("\n\n");
    for(i=0;i<5;i++)
    {
         indexOfCurrentSmallest = i;
         for(j=i;j<5;j++)
         {
              for(k=0;k<255;k++)
              {
                    if(arc5Strings[j][k] < arc5Strings[indexOfCurrentSmallest][k])
                    {
                      //we found a new possible smallest
                      indexOfCurrentSmallest = j;
                      break;
                    }
                    else if(arc5Strings[j][k] > arc5Strings[indexOfCurrentSmallest][k])
                    {
                        //no point in searching further, the one we are looking at is already larger than the one we found.
                        break;
                    }
              }
        }
         //let's do a swap
         for(q=0;q<255;q++)
         {
          temp = arc5Strings[i][q];
          arc5Strings[i][q] = arc5Strings[indexOfCurrentSmallest][q];
          arc5Strings[indexOfCurrentSmallest][q] = temp;
         }
    }   
    //---------------------------------------------------------------
    //print entire array
    printf("This is your selection sorted array based on ASCII values\n\n");
    for(nCount3 = 0; nCount3 < 5; nCount3++)
    {
        for(nCount4 = 0; arc5Strings[nCount3][nCount4] != '\0'; nCount4++)
        {
            printf("%c", arc5Strings[nCount3][nCount4]);
        }
    }
    //---------------------------------------------------------------------
    //Exchange Sort
    nNumValues = 5;
    nOutOrder = TRUE;
    nMoves = 0;
    while(nOutOrder && nNumValues > 0) 
    {
        nOutOrder = FALSE;
        for(i=0;i<5;i++)
        {
            for(nCount=0; nCount < nNumValues -1; nCount++)
                 {
                        for(nCount2=0, sorted=0; sorted==0; nCount2++)
                        {
                              if(arc5Strings[nCount][nCount2] < arc5Strings[nCount+1][nCount2])
                              {
                                     for(letter=0; letter<256; letter++)
                                     {
                                        arcTemp[letter] = arc5Strings[nCount][letter];
                                     }
                                     for(letter=0; letter<256; letter++)
                                     {
                                        arc5Strings[nCount][letter]= arc5Strings[nCount+1][letter];
                                     }
                                     for(letter=0; letter<256; letter++)
                                     {
                                        arc5Strings[nCount+1][letter] = arcTemp[letter];
                                     }
                                     sorted = 1;
                                     nMoves++;
                              }
                              else if (arc5Strings[nCount][nCount2] < arc5Strings[nCount+1][nCount2])
                                   sorted = 1;
                        }
                 }
            nNumValues--;
        }
    }
    printf("\n\n\nThe sorted list in Descending order is: \n\n\n");
    for(nCount5 = 0; nCount5 < 5; nCount5++)
    {
            printf("%s", arc5Strings[nCount5]);
    }
//-----------------------------------------------
    printf("\n %d moves were required to sort this list\n\n", nMoves);
    return 0;
}   
 
     
     
    