Προς το περιεχόμενο

c++


spilia

Προτεινόμενες αναρτήσεις

Δημοσ.

Τι απο ολα αυτα σε δυσκολευει?Εχεις καθολου ιδεα απο c++?Μηπως να κοιταζες κανενα online tutorial?Να υποθεσω ολα αυτα σε πινακα ακεραιων και η ταξινομηση σε αυξουσα σειρα και τα στοιχεια τα δινει ο χρηστης?Γινε πιο συγκεκριμενος..

Δημοσ.

nai akribos ayto pou ipes

basika mexri tin taxinomisi exo kani kati alla den exo kamia idea apo taxinomisi kai prepi na paradosoume ergasia.

eyxaristo

thes na stilo ayto pou exo kani?

Δημοσ.

Υπαρχουν αλγοριθμοι ταξινομησης οπως bubblesort,insertion sort..Αν θες μπορεις να βρεις κωδικα στο Internet για αυτες..

Στειλε pm αν θες ο,τι εχεις κανει.

Δημοσ.

Ο παρακάτω κώδικας είναι γραμμένος σε C και εκτελεί μερικές από τις ποιο γνωστές ταξινομήσεις. Η μετατροπή σε C++ είναι πολύ εύκολη οπότε το αφήνω πάνω σου!!

Φιλικά Bokarinho..

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int *CreateArray(int Size)
{
   if(Size)
   {
           int *A = (int*)calloc(Size, sizeof(int));
           if(A)
           return A;
   }
   else
   return NULL;
}
void PrintArray(int *A, int Size)
{
    if(A)
    {
         int i = 0;
         while(i < Size)
         {
                 printf("%d ",A[i++]);
         }
         printf("\n");
    }
}
int FillArrayRandom(int *A, int Size, int low, int high)
{
   if(A)
   {
        if(low < high)
        {
               int i = 0;
               int width = high - low;
               srand(time(NULL));
               while(i < Size)
               {
                       A[i++] = (rand() / (double)RAND_MAX) * width + low;
               }
               return i == Size ? 0 : -1;
        }
        else
        {
            printf("I can use fabs() if you want but remember that low  < high.\n");
            return -2;
        }
   }
   else
   {
       printf("Error in Array.\n");
       return -3;
   }
}
void Swap(int *x, int *y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}
void BubbleSort(int *A, int Size)
{
    int i = 0;
    int swapped;
    do
    {
        swapped = 0;
        for(i = 0; i < Size - 2; i++)
        {
              if(A[i] > A[i+1])
              {
                      Swap(&A[i],&A[i+1]);
                      swapped = 1;
              }
        }
    }while(swapped);
}
void SelectionSort(int *A, int Size)
{
    if(A)
    {
         if(Size)
         {
                 int i = 0;
                 int j = 0;
                 int min = 0;
                 for(i = 0; i < Size - 1; i++)
                 {
                       min  = i;
                       for(j = i+1; j < Size; j++)
                       {
                             if(A[j] < A[min])
                                     min = j;
                       }
                       Swap(&A[i], &A[min]);
                 }
         }
         else
             printf("Error Size of Array.\n");
    }
    else
    printf("Array NULL.\n");
}
int Partition(int *A, int left, int right, int PivotIndex)
{
   if(A)
   {
        if(left < right)
        {
                //Store the value of array[pivotIndex] in a variable
                int i = 0;
                int StoreIndex = left;
                int PivotValue = A[PivotIndex];
                Swap(&A[PivotIndex], &A[right]); //Swap the pivot value to the end of the array
                for(i = left; i <= right-1; i++)
                {
                      if(A[i] <= PivotValue)
                              Swap(&A[storeIndex++], &A[i]);
                }
                if(A[right] <= A[storeIndex])
                {
                            Swap(&A[right], &A[storeIndex]);
                            return StoreIndex;
                }
                else
                return right;
        }
        else
        printf("Invalid Parametres.\n");
   }
   else
   printf("A = NULL.\n");
}
void QuickSort(int *A,int left, int right)
{
    if(right > left)
    {
             int PivotNewIndex = Partition(A,left,right,left);
             QuickSort(A,left, PivotNewIndex-1);
             QuickSort(A,PivotNewIndex+1, right);
    }
}
void InsertionSort(int *A, int Size) //Average O(n2) , Best O(n)
{
    if(A)
    {
         int i = 0;
         int j = 0;
         int index = 0;
         for(i = 1; i < Size; i++)
         {
               index = A[i];
               j = i;
               while(j > 0 && A[j-1] > index)
               {
                       A[j] = A[j-1];
                       j -= 1;
               }
               A[j] = index;
         }
    }
}
void FreeArray(int *A)
{
    free(A);
    A = NULL;
}
int main(int argc, char *argv[])
{
 int *A = CreateArray(20);
 FillArrayRandom(A,20,10, 100);
 printf("Initial Array.\n");
 PrintArray(A,20);
 //BubbleSort(A,20);
 //SelectionSort(A,20);
 //QuickSort(A,0,19);                //Choose What kind of sorting you want, just unfill the brackets.
 //InsertionSort(A,20);
 printf("Sorted Array.\n");
 PrintArray(A,20);
 free(A);
 system("PAUSE");	
 return 0;
}

Δημοσ.

++ HeapSort....:-D:-D:-D:-D

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int *CreateArray(int Size)
{
   if(Size)
   {
           int *A = (int*)calloc(Size, sizeof(int));
           if(A)
           return A;
   }
   else
   return NULL;
}
void PrintArray(int *A, int Size)
{
    if(A)
    {
         int i = 0;
         while(i < Size)
         {
                 printf("%d ",A[i++]);
         }
         printf("\n");
    }
}
int FillArrayRandom(int *A, int Size, int low, int high)
{
   if(A)
   {
        if(low < high)
        {
               int i = 0;
               int width = high - low;
               srand(time(NULL));
               while(i < Size)
               {
                       A[i++] = (rand() / (double)RAND_MAX) * width + low;
               }
               return i == Size ? 0 : -1;
        }
        else
        {
            printf("I can use fabs() if you want but remember that low  < high.\n");
            return -2;
        }
   }
   else
   {
       printf("Error in Array.\n");
       return -3;
   }
}
void Swap(int *x, int *y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}
void BubbleSort(int *A, int Size)
{
    int i = 0;
    int swapped;
    do
    {
        swapped = 0;
        for(i = 0; i < Size - 2; i++)
        {
              if(A[i] > A[i+1])
              {
                      Swap(&A[i],&A[i+1]);
                      swapped = 1;
              }
        }
    }while(swapped);
}
void SelectionSort(int *A, int Size)
{
    if(A)
    {
         if(Size)
         {
                 int i = 0;
                 int j = 0;
                 int min = 0;
                 for(i = 0; i < Size - 1; i++)
                 {
                       min  = i;
                       for(j = i+1; j < Size; j++)
                       {
                             if(A[j] < A[min])
                                     min = j;
                       }
                       Swap(&A[i], &A[min]);
                 }
         }
         else
             printf("Error Size of Array.\n");
    }
    else
    printf("Array NULL.\n");
}
int Partition(int *A, int left, int right, int PivotIndex)
{
   if(A)
   {
        if(left < right)
        {
                //Store the value of array[pivotIndex] in a variable
                int i = 0;
                int StoreIndex = left;
                int PivotValue = A[PivotIndex];
                Swap(&A[PivotIndex], &A[right]); //Swap the pivot value to the end of the array
                for(i = left; i <= right-1; i++)
                {
                      if(A[i] <= PivotValue)
                              Swap(&A[storeIndex++], &A[i]);
                }
                if(A[right] <= A[storeIndex])
                {
                            Swap(&A[right], &A[storeIndex]);
                            return StoreIndex;
                }
                else
                return right;
        }
        else
        printf("Invalid Parametres.\n");
   }
   else
   printf("A = NULL.\n");
}
void QuickSort(int *A,int left, int right)
{
    if(right > left)
    {
             int PivotNewIndex = Partition(A,left,right,left);
             QuickSort(A,left, PivotNewIndex-1);
             QuickSort(A,PivotNewIndex+1, right);
    }
}
void InsertionSort(int *A, int Size) //Average O(n2) , Best O(n)
{
    if(A)
    {
         int i = 0;
         int j = 0;
         int index = 0;
         for(i = 1; i < Size; i++)
         {
               index = A[i];
               j = i;
               while(j > 0 && A[j-1] > index)
               {
                       A[j] = A[j-1];
                       j -= 1;
               }
               A[j] = index;
         }
    }
}
void SiftUp(int *A, int Start, int End)
{
    if(A)
    {
         int root = Start;
         int child = 0;
         while(2 * root + 1 <= End)
         {
                 child  = 2 * root + 1;
                 if(child < End && A[child] < A[child + 1])
                 child = child + 1;
                 if(A[root] < A[child])
                 {
                            Swap(&A[root], &A[child]);
                            root = child;
                 }
                 else
                 root = child;
         }
    }                            
}
void Heapify(int *A, int Size)
{
    int start = Size / 2 -1;
    for(start; start >=0; start--)
    {
               SiftUp(A, start, Size-1);
    }
}
void HeapSort(int *A, int Size)
{
    int end = Size - 1;
    Heapify(A,Size);
   while(end > 0)
   {
             Swap(&A[end],&A[0]);
             end -= 1;
             SiftUp(A,0,end);
   }
}
void FreeArray(int *A)
{
    free(A);
    A = NULL;
}
int main(int argc, char *argv[])
{
 int *A = CreateArray(20);
 FillArrayRandom(A,20,10, 100);
 printf("Initial Array.\n");
 PrintArray(A,20);
 //BubbleSort(A,20);
 //SelectionSort(A,20);
 //QuickSort(A,0,19);                //Choose What kind of sorting you want, just unfill the brackets.
 //InsertionSort(A,20);
 HeapSort(A,20);
 printf("Sorted Array.\n");
 PrintArray(A,20);
 free(A);
 system("PAUSE");	
 return 0;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...