Din swap-funktion arbejder på lokale variable (call by value) Du skal lave den så den bruger call by reference, ellers kan den ikke bytte om på tallene:
int d1 // betyder en kopi af d1 int& d1 // betyder referencen til d1
for (a = 0; a < n; a++) { smallestId=a; for (j = a + 1; j < n; j++) { if (array[j] < array[smallestId]) smallestId=j; } // når vi har fundet det mindste, så bytter vi if (smallestId != a) swap(array[a], array[smallestId]);
// ----------------------------- funktion sortere array'et ---------------- // ------- to parametere array til sortering og størrelsen af array ------
void sortArray(int array[], int size) { int i = 0; while( i < size ) { if( array[i] > array[i + 1] ) { int tmp = array[i]; array[ i ] = array[i + 1]; array[i + 1] = tmp;
i = 0; } else { i++; } } };
// ----------------------------- udskriver usorteret -------------------- void outUnSort(int* array, int n) { int i; printf("usorteret:\n"); for( i = 0; i < n; i++ ) printf("%d \n", array[i]); }
// ------------------------------------- main ---------------------------- int main() { int i; int n = 10; // antal tal der proppes i array'et int array[n];
// ------------------------------- random til array ----------------------- // ---------------------- n tilfældige tal stoppes i array ---------------- for( i = 0; i < n; i++ ) array[i] = (rand() % 100);
outUnSort(array, n);
// ---------------------------------- kald af sort array ------------------ printf("\nsorteret:\n"); sortArray(array, n);
for( i = 0; i < n; i++ ) printf("%d\n", array[i]);
printf("\n"); system("pause"); return 0; }
Det må gerne kommenteres, er det en fin løsning eller findes der bedre... ??
// Swap funktion der lægger array'et i rigtig rækkefølge. void swap(int& d1, int& d2) { int temp = d1; d1 = d2; d2 = temp; }
int main() { int i; int n = 10; // antal tal der proppes i array'et int array[10];
// putter n tilfældige tal, mellem 0 og 100 i et array. srand((unsigned)time(NULL)); for( i = 0; i < n; i++ ) array[i] = (rand() % 100);
// udskriver usorteret printf("usorteret:\n"); for( i = 0; i < n; i++ ) printf("%d \n", array[i]);
// udskriver sorteret printf("\nsorteret:\n");
int a; int j; int smallestId;
for (a = 0; a < n; a++) { smallestId=a; for (j = a + 1; j < n; j++) { if (array[j] < array[smallestId]) smallestId=j; } if (smallestId != a) swap(array[a], array[smallestId]);
Metoden sortArray er mindre effektiv, da du nulstiller og starter forfra igen og igen...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.