Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

<p>This is what I have so far. It compiles and runs fine just does not give me t

ID: 3623780 • Letter: #

Question

<p>This is what I have so far. It compiles and runs fine just does not give me the order I exspect i.e in alphabetical order.</p>
<p>// HeapSort.cpp : main project file.<br /><br />#include &lt;stdafx.h&gt;<br />#include &lt;iostream&gt;<br />#include &lt;string&gt;<br />#include &lt;stdlib.h&gt;<br />#using &lt;mscorlib.dll&gt;<br /><br />using namespace std;<br /><br />template&lt;typename T, int size&gt;<br />int GetArrLength(T(&amp;)[size]){return size;}<br /><br />void moveDown(string *starTrekCharacters, int start, int count)<br />{<br />&#160;&#160;&#160; int daRoot = start;<br />&#160;&#160;&#160; int daChild;<br /><br />&#160;&#160;&#160; while (daRoot * 2 + 1 &lt; count) <br />&#160;&#160;&#160; {<br />&#160;&#160;&#160; &#160;&#160;&#160; daChild = daRoot * 2 + 1;<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; if (daChild &lt; count - 1 &amp;&amp; starTrekCharacters[daChild] &lt; starTrekCharacters[daChild + 1]) <br />&#160;&#160;&#160; &#160;&#160;&#160; {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; daChild = daChild + 1;<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; }<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; if (starTrekCharacters[daRoot] &lt; starTrekCharacters[daChild]) <br />&#160;&#160;&#160; &#160;&#160;&#160; {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; swap(starTrekCharacters[daRoot], starTrekCharacters[daChild]);<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; daRoot = daChild;<br />&#160;&#160;&#160; &#160;&#160;&#160; <br />&#160;&#160;&#160; &#160;&#160;&#160; <br />&#160;&#160;&#160; &#160;&#160;&#160; }<br />&#160;&#160;&#160; &#160;&#160;&#160; else{<br />&#160;&#160;&#160; <br /><br /><br />&#160;&#160;&#160; &#160;&#160;&#160; return;<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; }<br />&#160;&#160;&#160; &#160;&#160;&#160; <br />&#160;&#160;&#160; }<br />&#160;&#160;&#160; return;<br />}<br /><br />void heapSort(string starTrekCharacters[], int numberOfItems)<br />{<br />&#160; int start = numberOfItems / 2 - 1; <br /><br />&#160; int end = numberOfItems - 1;<br />&#160;&#160;&#160; <br />&#160;&#160;&#160; while(start &gt;= 0)<br />&#160;&#160; {<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; moveDown(starTrekCharacters,start,numberOfItems);<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; start = start - 1;<br /><br /><br />&#160;&#160;&#160; &#160;&#160;&#160; while(end &gt; 0)<br />&#160;&#160;&#160; &#160;&#160;&#160; {<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; swap(starTrekCharacters[end], starTrekCharacters[0]);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; moveDown(starTrekCharacters,end,numberOfItems);<br />&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; end = end - 1;<br /><br />&#160;&#160;&#160; &#160;&#160;&#160; }<br /><br />&#160;&#160;&#160; }<br />&#160;&#160;&#160; return;<br />&#160;<br />}<br /><br />void printItems(string characters[], int numberOfItems)<br />{<br />&#160;&#160; for (int i=0; i &lt; numberOfItems; i++)<br />&#160;&#160; {<br />&#160;&#160;&#160;&#160;&#160; cout &lt;&lt; characters[i] &lt;&lt; endl;<br />&#160;&#160; }<br />&#160;&#160; cout &lt;&lt; endl;<br /><br />&#160;&#160; return;<br />}<br /><br />int main(int argc, char **argv)<br />{<br />&#160;&#160; string starTrekCharacters[] = {<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; "c", "b", "D", "a"<br />&#160;&#160;&#160;&#160; };<br />&#160; <br />&#160;&#160; int numberOfCharacters = GetArrLength(starTrekCharacters);<br />&#160; <br />&#160;&#160; // Print the unsorted items<br />&#160;&#160; cout &lt;&lt; "Items unsorted:" &lt;&lt; endl; <br />&#160;&#160; printItems(starTrekCharacters, numberOfCharacters);<br /><br />&#160;&#160; // Sort the items<br />&#160;&#160; heapSort(starTrekCharacters, numberOfCharacters);<br /><br />&#160;&#160; // Print the sorted items<br />&#160;&#160; cout &lt;&lt; "Items sorted:" &lt;&lt; endl; <br />&#160;&#160; printItems(starTrekCharacters, numberOfCharacters);<br />&#160;&#160; <br />&#160;&#160; system("PAUSE");<br />&#160;&#160; <br />&#160;&#160; return 0;<br />}</p>

Explanation / Answer

Figured it out. Everyone else enjoy!


// HeapSort.cpp : main project file.

#include <stdafx.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#using <mscorlib.dll>

using namespace std;

template<typename T, int size>
int GetArrLength(T(&)[size]){return size;}



void moveDown(string *starTrekCharacters, int start, int count)
{
   while (2 * start + 1 < count)
    {
        int largest = start;
        //If the child has a sibling and the child's value is less than its sibling's
        if (strcmp(starTrekCharacters[largest].c_str(), starTrekCharacters[2 * start + 1].c_str()) < 0)
        {

            largest = 2 * start + 1;
       
        }   
        if (2 * start + 2 < count && strcmp(starTrekCharacters[largest].c_str(), starTrekCharacters[2 * start + 2].c_str()) < 0)
        {
       
            largest = 2 * start + 2;
       
        }
        if (strcmp(starTrekCharacters[start].c_str(), starTrekCharacters[largest].c_str()) < 0)
        {
           
            swap(starTrekCharacters[start], starTrekCharacters[largest]);
            start = largest;
       
        }
        else
           
            break;
    }

}

void makeHeap(string *starTrekCharacters, int count)
        {
           
            int i;
            for (i = count / 2; i >= 0; --i)
                moveDown(starTrekCharacters, i, count);

        }


void heapSort(string starTrekCharacters[], int numberOfItems)
{
       
    makeHeap(starTrekCharacters, numberOfItems);
    //swap the root(maximum value) of the heap with the last element of the heap
    //decrease the size of the heap by one so that the previous max value will
    //stay in its proper placement
    while (numberOfItems != 1)
    {   
       
        swap(starTrekCharacters[0], starTrekCharacters[numberOfItems - 1]);
       
        --numberOfItems;

        moveDown(starTrekCharacters, 0, numberOfItems);//put the heap back in max-heap order  
   
    }

    return;

}

void printItems(string characters[], int numberOfItems)
{
   for (int i=0; i < numberOfItems; i++)
   {
      cout << characters[i] << endl;
   }
   cout << endl;

   return;
}

int main(int argc, char **argv)
{
   string starTrekCharacters[] = {
         "Picard", "Riker", "Data", "La Forge", "Worf", "Dr. Crusher",
        "Dr. Pulaski", "Wesley", "Troi", "Tasha", "Sisko", "Odo",
        "Dax", "O'Brien", "Quark", "Dr. Bashier", "Kira", "B'Elanna",
        "Chakotay", "Janeway", "Neelix", "Seven of Nine", "Tuvok",
        "Doctor", "Harry", "Tom", "Kes", "Archer", "T'Pol", "Tucker",
        "Reed", "Travis", "Hoshi", "Dr. Phlox", "Kirk", "Spock",
        "Bones", "Scotty", "Chekov", "Uhura", "Sulu", "Nurse Chapel"
     };

   int numberOfCharacters = GetArrLength(starTrekCharacters);

   // Print the unsorted items
   cout << "Items unsorted:" << endl;
   printItems(starTrekCharacters, numberOfCharacters);

   // Sort the items
   heapSort(starTrekCharacters, numberOfCharacters);

   // Print the sorted items
   cout << "Items sorted:" << endl;
   printItems(starTrekCharacters, numberOfCharacters);

   system("PAUSE");

   return 0;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote