spilia Δημοσ. 13 Ιουνίου 2007 Δημοσ. 13 Ιουνίου 2007 tha borouse kapios na me boithisi na ftiaxo ena programma pou na kani gemeisma emfanisi na briski to meso oro kai stin sinexia na kani taxinomisi?
happy Δημοσ. 13 Ιουνίου 2007 Δημοσ. 13 Ιουνίου 2007 Τι απο ολα αυτα σε δυσκολευει?Εχεις καθολου ιδεα απο c++?Μηπως να κοιταζες κανενα online tutorial?Να υποθεσω ολα αυτα σε πινακα ακεραιων και η ταξινομηση σε αυξουσα σειρα και τα στοιχεια τα δινει ο χρηστης?Γινε πιο συγκεκριμενος..
spilia Δημοσ. 13 Ιουνίου 2007 Μέλος Δημοσ. 13 Ιουνίου 2007 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?
happy Δημοσ. 13 Ιουνίου 2007 Δημοσ. 13 Ιουνίου 2007 Υπαρχουν αλγοριθμοι ταξινομησης οπως bubblesort,insertion sort..Αν θες μπορεις να βρεις κωδικα στο Internet για αυτες.. Στειλε pm αν θες ο,τι εχεις κανει.
bokarinho Δημοσ. 14 Ιουνίου 2007 Δημοσ. 14 Ιουνίου 2007 Ο παρακάτω κώδικας είναι γραμμένος σε 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; }
bokarinho Δημοσ. 14 Ιουνίου 2007 Δημοσ. 14 Ιουνίου 2007 ++ HeapSort....:-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; }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.