# C++ program to Sort Names in an Alphabetical Order

In this article, we are going to learn how to sort a list of names (lowercase) in alphabetical order (Dictionary order) using C++ program?
Submitted by Radib Kar, on December 12, 2018

Problem statement: Write a C++ program to sort N names in alphabetical order.

Example & explanation:

Let user inputs 5 names as following:

```    rahul
virat
vijay
bumrah
rahane
```

Alphabetical sorting means to sort names according to alphabet order starting from the rightmost character. (Rightmost character->'r' for 'rahul').

That means, in the 'rahul' precedes 'vijay' in alphabetical order since rightmost character of 'rahul' is 'r' where as rightmost character of 'vijay' is 'v' & 'r' precedes 'v' in alphabetical order.

The next concern is what about 'rahul' & 'rahane' since both of them has same rightmost character. In such cases compare corresponding elements from right to left direction.

Thus 'rahane' precedes 'rahul' since 'a' precedes 'u' in alphabetical order. (Both have 'rah' part common).

One more thing is 'abdul' will precedes 'abdulla' as both have 'abdul' as common part & 'abdul' has nothing left where 'abdulla' has.

So using the above facts the names will appear after sorting:

```    bumrah
rahane
rahul
vijay
virat
```

Algorithm:

1. Constructing list of names

Declare a vector of strings & take each string &insert to the vector.

```    vector<string>names;
for i=0:n-1
input each name;
insert name into the vector
End for loop
```

2. Sorting in alphabetical order

We can sort the vector using our own comparator function to sort the strings in alphabetical order.

Our comparator function is defined as:

```    Function[bool] mycomp (string a, string b)
return a<b;
//returns 1 if string a is alphabetically less than string b,
//which is quite similar to strcmp operation
//else returns 0
End Function
```

Now to sort the vector of string we use this comparator function while using STL sort function.

```    sort(names.begin(), names.end(), mycomp);
//this sorts the names in alphabetical order
```

## C++ implementation for Sorting Names in an Alphabetical Order

```#include <bits/stdc++.h>
using namespace std;

//function to print the array
void print(vector<string> names){
printf("printing ........\n");
for(int i=0;i<names.size();i++)
cout<<names[i]<<endl;
printf("\n");
}

bool mycomp(string a, string b){
//returns 1 if string a is alphabetically
//less than string b
//quite similar to strcmp operation
return a<b;
}

vector<string> alphabaticallySort(vector<string> a){
int n=a.size();
//mycomp function is the defined function which
//sorts the strings in alphabatical order
sort(a.begin(),a.end(),mycomp);
return a;
}

int main()
{
int n;
printf("enter number of names to be added: ");
scanf("%d",&n);

//creating a vector of strings
//vector to store strings(names)
vector<string> names;
string name;
printf("enter names: \n");
//taking input
for(int i=0;i<n;i++){
cin>>name;
//insert names into the vector
names.push_back(name);
}

printf("\nbefore sorting\n");
print(names);

//function to sort names alphabetically
names=alphabaticallySort(names);

printf("after alphabetical sorting\n");
print(names);

return 0;
}
```

Output

```enter number of names to be added: 5
enter names:
rahul
virat
vijay
bumrah
rahane

before sorting
printing ........
rahul
virat
vijay
bumrah
rahane

after alphabetical sorting
printing ........
bumrah
rahane
rahul
vijay
virat
```