Hello there, okie, my problem today is i i have all this names,

John, Dave, Steve, Kevin,Andrew,Scott,Colin,Timothy,Zenon

and i have to sort them using insertion sort, i can sort number using insertion sort with no probs, but when it comes to strings, and stuff, i get lots of problems. so plz guyz help me out.

here is the code i tried,

i used the same procedure as sorting numbers, i don't know if that's the rite procedure.

#include <iostream>
#include <string>
using namespace std;

int main()
{

string arnList[9]={"John", "Dave", "Steve", "Kevin","Andrew","Scott","Colin","Timothy","Zenon"};
int nLength=9;
int nTemp;

for (int iCv = 1; iCv < nLength; ++iCv)
    {
      //the new value to be inserted into a temporary location 
      nTemp = arnList[iCv];
      // k is the index of the number to the left of the iCv.
      for (int k = iCv-1; k >= 0 && arnList[k] > nTemp; k--)
      {
        arnList[k+1] = arnList[k];
      }
      arnList[k+1] = nTemp;
    }
    for(iCv=0;iCv<nLength;iCv++) cout<<arnList[iCv]<<" ";
    cout<<endl;
return 0;
}

>i don't know if that's the rite procedure.
The string class is designed to act like a first class type, so the operations you use on numbers should work for string objects as well. There are a few problems with your code though.

>int nTemp;
nTemp is the temporary storage for the item you save. Since you're saving a string, ntemp should be defined as a string:

string nTemp;

>for (int iCv = 1; iCv < nLength; ++iCv)
One of the things you need to keep in mind with for loops is if you declare the counter in the loop, you can't use it after the loop. If you need iCv after the loop ends (which you do), it has to be defined outside of the loop:

int iCv;

for (iCv = 1; iCv < nLength; ++iCv)

>for (int k = iCv-1; k >= 0 && arnList[k] > nTemp; k--)
Ditto here. You use k after the loop, so it can't be defined inside the initialization clause.

The fixes are minor. All in all, you were very close to a working solution. :)

#include <iostream>
#include <string>
using namespace std;

int main()
{
  string arnList[9]={"John", "Dave", "Steve", "Kevin","Andrew","Scott","Colin","Timothy","Zenon"};
  int nLength=9;
  string nTemp;
  int iCv;

  for (iCv = 1; iCv < nLength; ++iCv)
  {
    //the new value to be inserted into a temporary location 
    nTemp = arnList[iCv];
    // k is the index of the number to the left of the iCv.
    int k;

    for (k = iCv-1; k >= 0 && arnList[k] > nTemp; k--)
    {
      arnList[k+1] = arnList[k];
    }
    arnList[k+1] = nTemp;
  }
  for(iCv=0;iCv<nLength;iCv++) cout<<arnList[iCv]<<" ";
  cout<<endl;

  return 0;
}

YEp worked, thanks Narue, for the help,
reputaion added,
take care,
Bye

however, am i right to assume that this only works for strings with the number of characters less than or equal to 9.?

how do we sort names 3 names in alphabetical order in c which are entered from the keyboard.

help would be appreciated.

Is insertion sort a best way to sort a list alphabetically? Can we use shell sort to accomplish the same?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.