DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/)
-   C++ (http://www.daniweb.com/forums/forum8.html)
-   -   Sort in Alphabetical order (http://www.daniweb.com/forums/thread64778.html)

GuruGhulab Dec 13th, 2006 3:11 pm
Sort in Alphabetical order
 
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;
}

Narue Dec 13th, 2006 3:19 pm
Re: Sort in Alphabetical order
 
>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;
}

GuruGhulab Dec 13th, 2006 3:32 pm
Re: Sort in Alphabetical order
 
YEp worked, thanks Narue, for the help,
reputaion added,
take care,
Bye


All times are GMT -4. The time now is 10:49 am.

Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC