troubleshooting Question

do while loop

Avatar of fird
fird asked on
C++
14 Comments1 Solution486 ViewsLast Modified:
anyone can help me to insert the do while loop in this program since the program only sort the bubble sort part.

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <sys\timeb.h>
#include <ctime>
#include <string>
#include <fstream>

using namespace std;

class Timer
{
 public:
 Timer()
   : secStart(0), secStop(0),
     milliSecStart(0), milliSecStop(0)
 { }  
 void start(string msg="")
   {
    cout << msg;
    ftime(&time);
    secStart = time.time;    
    milliSecStart = time.millitm;
   }
 void stop(string msg="")
   {
    ftime(&time);
    secStop = time.time;    
    milliSecStop = time.millitm;
    cout << msg;
   }

 //Will returns number of milliseconds ellapsed
 long read()
   {
         secDiff =      secStop -      secStart;
    milliSecDiff = milliSecStop - milliSecStart;
    if (milliSecDiff < 0)
       {
        milliSecDiff += 1000;
        secDiff--;
       }
     return (secDiff*1000 + milliSecDiff);
   }  
 private:
   long       secStart,      secStop;
   short milliSecStart, milliSecStop;
   long       secDiff,  milliSecDiff;
   struct timeb time;
};

class DataStore
{
 public:
   DataStore(int Size)
     {  
       size = Size;
       data = new int[Size];
     }
   ~DataStore()
     { delete[] data; }
   void randomizeData(int seekValue)
     {
      srand( seekValue );
      for (int i=0; i<size; i++)
         { data[i] = rand() % size; }
     }
   void bubbleSort(int N)
     {
      for (int i=0; i<N; i++)
      for (int j=N-1; j>=i+1; j--)
        {
         if (data[j] < data[j-1] )
           {
            int  temp = data[j];
            data[j]   = data[j-1];
            data[j-1] = temp;
           }
        }
     }
   void selectionSort(int N){
      for (int x = 0; x < N; x++){
            int index_of_max = x;
            for(int y = x; y < N; y++){
                if(data[index_of_max] > data[y]){
                    index_of_max = y;
                }
            }
            int temp = data[x];
            data[x] = data[index_of_max];
            data[index_of_max] = temp;
      }
   }
   void insertionSort(int N){
      int i, j, key;
      for(j = 1; j < N; j++){
            key = data[j];
            for(i = j - 1; (i >= 0) && (data[i] > key); i--){
                data[i+1] = data[i];
            }
            data[i+1] = key;
      }
   }
   void shellSort(int N){
      int flag = 1, i, temp, arrayLength = N;
      while(flag || (N > 1)){
            flag = 0;
            N = (N + 1) / 2;
            for(i = 0; i < (arrayLength - N); i++){
                if(data[i + N] < data[i]){
                    temp = data[i + N];
                    data[i + N] = data[i];
                    data[i] = temp;
                    flag = 1;
                }
            }
      }
   }
   
   void quickSort(int low, int high){
      int lowbound = low + 1;
      int highbound = high - 1;
      int temp;
      while(lowbound <= highbound){
            if(data[lowbound] < data[low]){
                lowbound++;
            }else{
                temp = data[lowbound];
                data[lowbound] = data[highbound];
                data[highbound] = temp;
                highbound--;
            }
      }
      highbound++;
      lowbound--;
     
      temp = data[low];
      data[low] = data[lowbound];
      data[lowbound] = temp;
     
      if(low != lowbound)
          quickSort(low, lowbound);
      if(high != highbound)
          quickSort(highbound, high);
   }
 // MERGE SORT
   void mergeSort(int left, int right){
      if(left < right){
              int mid = (left + right) / 2;
              mergeSort(left, mid);
              mergeSort(mid+1, right);
              merge(left,right);
      }
   }

   void merge(int left, int right){
         int size = right - left + 1;
         int mid = (left+right)/2;
      
          int *b = new int[size];
          int count = 0;
          for(int x = left; x <= mid; x++, count++){
              b[count] = data[x];
         }
         for(int x = right; x >= mid+1; x--, count++){
              b[count] = data[x];
         }
         for(int x = 0, y = size-1, put=left; x <= y; put++){
              if(b[x] <= b[y]){
                    data[put] = b[x];
                    x++;
              }
              else{
                    data[put] = b[y];
                    y--;
              }
          }
          delete[] b;
   }
 // END MERGE SORT
 
 // START RADIX SORT
   int radixSort(int size,int p,int k){
      int *counts;
      int *temp;
      int *data_tmp;
      int index;
      int pval;
      int i;
      int j;
      int n;
      data_tmp = data;

      if((counts = (int *)malloc(k * sizeof(int))) == NULL){
            return -1;
      }

      if((temp = (int *)malloc(size * sizeof(int))) == NULL){
            return -1;
      }

      for( n=0; n < p; n++){
            for(i=0; i < k; i++){
                counts[i] = 0;
            }
            pval = (int)pow((double)k,(double)n);

            for(j=0; j < size; j++){
                index = (int)(data_tmp[j] / pval) % k;
                counts[index] = counts[index] +1;
            }
            for(i = 1; i < k; i++){
                counts[i] = counts[i] + counts[i -1];
            }
            for(j = size -1; j >= 0; j--){
                index = (data_tmp[j] / pval) % k;
                temp[counts[index] -1] = data_tmp[j];
                counts[index] = counts[index] -1;
            }
            memcpy(data,temp,size * sizeof(int));
       }
       free(counts);
       free(temp);
       return 0;
   }
   // END RADIX SORT
   void display(int N)
     {
      for (int i=0; i<N; i++)
         cout << data[i] << " ";
     }
 
private:
     int* data;
     int size;
};

void menu()
{
    int ch;
    cout << endl << endl;
    cout << "\n\t\t------------------------------------------" << endl;
    cout << "\t\t\t\tMain Menu ";
    cout << "\n\t\t------------------------------------------" << endl << endl;
    cout << "\t\t[1] - Bubble Sort" << endl;
    cout << "\t\t[2] - Selection Sort" << endl;
    cout << "\t\t[3] - Insertion Sort" << endl;
    cout << "\t\t[4] - Shell Sort" << endl;
    cout << "\t\t[5] - Quick Sort" << endl;
    cout << "\t\t[6] - Merge Sort" << endl;
    cout << "\t\t[7] - Radix Sort" << endl;
    cout << "\t\t[0] - Quit Program" << endl << endl;
    cout << "\n\t\t\tPlease enter your choice : ";
    cin >> ch;
    cout << endl;
    cout << "\n\t\t------------------------------------------" << endl;
}

int main(void)
{
 
 Timer t;
 DataStore d(100000);
 
 //d.randomizeData( 17710 );
 //d.display(1000); //display data that is randomized
 
 ofstream sortOutput("sortOutput.txt");
 int countData;

 menu();
   
 int ch;  
 switch(ch)
 {
    case 1:    cout << "BubbleSort Start" << endl;
               sortOutput << "Bubble Sort\n";
               for(int i = 0, countData = 10000; i < 10; i++)
               {
                    t.start("\nTimer Started\nSorting..");
                    d.bubbleSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData); //display sorted data
                    countData += 10000;
                    d.randomizeData(17710);
               }
 
                cout << "BubbleSort End" << endl;
                menu();
                break;
               
               
    case 2:     cout << "SelectionSort Start" << endl;
                sortOutput << "\nSelection Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.selectionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "SelectionSort End" << endl;
                menu();
                break;
               

     case 3:    cout << "InsertionSort Start" << endl;
                sortOutput << "\nInsertion Sort\n";
 
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.insertionSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                }
                cout << "InsertionSort End" << endl;
                menu();
                break;
               
               
     case 4:    cout << "ShellSort Start" << endl;
                sortOutput << "\nShell Sort\n";        
               
                for(int i = 0, countData = 10000; i < 10; i++)
                {
                    t.start("Timer Started\nSorting..");
                    d.shellSort(countData);
                    t.stop("Timer Stopped\n");
                    cout << countData << " random numbers sorted" << endl;
                    cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                    sortOutput << countData << "random numbers sort = " 
                               << t.read() << " miliseconds\n" << endl;
                    //d.display(countData);
                    countData += 10000;
                    d.randomizeData(17710);
                 }
                 cout << "ShellSort End" << endl;
                 menu();
                 break;
                 
 
     case 5:     cout << "quickSort Start" << endl;
                 sortOutput << "\nQuick Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                     t.start("Timer Started\nSorting..");
                     d.quickSort(0,countData);
                     t.stop("Timer Stopped\n");
                     cout << countData << " random numbers sorted" << endl;
                     cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                     sortOutput << countData << "random numbers sort = " 
                                << t.read() << " miliseconds\n" << endl;
                     //d.display(countData);
                     countData += 10000;
                     d.randomizeData(17710);
                 }
                 cout << "quickSort End" << endl;
                 menu();
                 break;
 
     case 6:     cout << "mergeSort Start" << endl;
                 sortOutput << "\nMerge Sort\n";
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.mergeSort(0, countData);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                 }
                 cout << "mergeSort End" << endl;
                 menu();
                 break;
                 
                 
     case 7:     cout << "radixSort Start" << endl;
                 sortOutput << "\nRadix Sort\n" << endl;
 
                 for(int i = 0, countData = 10000; i < 10; i++)
                 {
                      t.start("Timer Started\nSorting..");
                      d.radixSort(countData,20,10);
                      t.stop("Timer Stopped\n");
                      cout << countData << " random numbers sorted" << endl;
                      cout << "Time taken = " << t.read() << " miliseconds\n" << endl;
                      sortOutput << countData << "random numbers sort = " 
                                 << t.read() << " miliseconds\n" << endl;
                      //d.display(countData);
                      countData += 10000;
                      d.randomizeData(17710);
                  }
                  cout << "radixSort End" << endl;
                  menu();
                  break;
                 

    case 0:       cout << "\n\t\t------------------------------------------" << endl;
                  cout << endl;
                  cout << "\tThank You for using this system!" << endl;
                  cout << "\tGoodbye!" << endl;
                  cout << endl << endl;
                  cout << "\n\t\t------------------------------------------" << endl;
                  cout << endl;  
                  break;
                 
    default:     cout << "Invalid Choice!\a\a\a" << endl;
                 menu();      

  sortOutput.close();
 
  system("pause");
  return 0;
 }
}
Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 14 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 14 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros