Ad

Saturday, June 09, 2007

Sorting an array using Selection Sort

Sorting is the process by which the elements of a group (ex. Arrays) are arranged in a specific order (ascending or descending).

The process of sorting is very important, since it is needed in many types of programs. Ex. If you need to arrange the heights of various students in a class, you need to sort their heights.

While there are quite a few methods employed for sorting, we will be discussing about Selection Sort method in this article.

In selection sort, all the elements of an array are compared with the other elements following it and interchanged so that smaller elements come at the top.

So, what that means is that the first element is compared with the second, third … elements then the next is selected (second element of the array) and it is compared with the third, fourth … elements and in this way different elements are selected serially and compared with elements following it. Interchange is done so that smaller elements come high up in the array. (for ascending order)

To make this process clear, let us consider this array: a rr[4]={4,5,3,2}

Steps for sorting this array are outlined below:

  1. The first element of the array is selected and compared with the other elements following it and interchanged if required so that the smallest elements comes at the top. Now, arr[4]={2,5,4,3}
  2. Again the same process is repeated taking the next element (second element of the array) as the selected element and comparing it with the elements following it (i.e. 4,3). Now, arr[4]={2,3,5,4}
  3. Same process is repeated again. Now, arr[4]={2,3,4,5}

The array has been sorted.

In the program below, I have programmed the sorting process as a separate function so that it would be easy for you to incorporate sorting function in your programs.

   //selection sort program in C++
   #include<iostream.h>
   void sel_sort (int *array,int n);
   void main(void)
   {
   int arr[10],i;
   cout<<"Input 10 Numbers: ";
   for (i=0;i<10;i++)
     cin>>arr[i];

   sel_sort(arr,10);

   for (i=0;i<10;i++)
     cout<<arr[i]<<" ";
   }
   //FUNCTION IS DEFINED HERE
   //this function takes two arguments
   //first argument is the pointer to
   //the array that has to be sorted
   //and the second is the number of
   //elements the array has.

   void sel_sort(int *array, int n)
   {
   int temp,i,j;

   for(i=0;i<(n-1);i++)
     for(j=i+1;j<(n);j++)
       {
       if(*(array+i)>*(array+j))
         {
         temp=*(array+i);
         *(array+i)=*(array+j);
         *(array+j)=temp;
         }
       }
   }

Here a pointer is used in the parameter of the function. This is because we cannot return an array from a function therefore we need to the modify (sort, in this case) the array that is being passed to the function.

That means, we are not modifying any variables, we are just modifying the contents of the memory address that is being passed as a pointer.

Hope this helps!

Related Articles:

10 comments:

  1. Muzammil10:02 AM

    I dont understand what the following statement does.

    if(*(array+i)>*(array+j))

    plz make it clearer.

    ReplyDelete
  2. Muzammil10:05 AM

    Muzammil said :10:02 AM
    I dont understand how the following statement works.

    if(*(array+i)>*(array+j))

    plz make it clearer.

    ReplyDelete
  3. Hi Muzammil,

    As you can see the function is accepting s pointer to which the address of the first element of the array (to be sorted) is passed.

    Suppose has the following mapping in memory:

    1000 -> 5
    1004 -> 7
    1008 -> 2

    Where 1000, 1004, 1008 are memory addresses and 5, 7, 2 are elements. Now, the base pointer of the array passed, will point to element 5.

    In the first iteration when i=0 and j=1, the statement:

    if(*(array+i)>*(array+j))

    Will become:

    if(*(array)>*(array + 1))

    Which means:

    if(5 > 7)

    For second iteration i = 0, j = 2

    if(5 > 2)

    And so on.

    Hope this clears your doubt.

    For more information of pointers read:
    http://www.cplusplus.com/doc/tutorial/pointers/

    ReplyDelete
  4. This comment has been removed by the author.

    ReplyDelete
  5. how can we sort an array with pointer

    ReplyDelete
  6. Hi Appu,

    We're actually using a pointer to sort the array. Look closely again.

    ReplyDelete
  7. hi appu
    it means using pointer

    ReplyDelete
  8. any problem u contact with us

    ReplyDelete
  9. I don't think you've actually implemented selection sort.

    This is bubble sort.

    I've understood selection sort to be the process which: finds the max of an array, swap it with the last element, and then repeats the process on a subarray, excluding the last element, until the number of remaining elements is one.

    void sel_sort ( int *arr, size_t size )
    {
    size_t i;
    size_t max;
    int temp;
    do
    {
    max = 0;
    for ( i = 0; i < size; i++ )
    {
    if ( *(arr+i) > *(arr+max) )
    {
    max = i;
    }
    }
    temp = *(arr+size-1);
    *(arr+size-1) = *(arr+max);
    *(arr+max) = temp;
    --size;
    }
    while ( size > 1 );
    }

    Like that.

    ReplyDelete
  10. Anonymous9:07 AM

    the program is so difficult to understand,,
    when i enter the codes in my IDE it creates lots of errors....

    ReplyDelete

You are free to comment anything, although you can comment as 'Anonymous' it is strongly recommended that you supply your name. Thank You.

Please don't use abusive language.