Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
C /
ismertebb rendezési algoritmusok
Beszúrásos rendezésvoid beszurasos_rendezes(int tomb[], int meret) { int i, j, temp, x; fprintf(stderr, "# beszurasos rendezes\n"); for (i = 1; i < meret; ++i) { x = tomb[i]; /* aktuális elem */ /* x beszúrása az x előtti rendezett sorozatba */ j = i - 1; while ((j >= 0) && (tomb[j] > x)) { tomb[j+1] = tomb[j]; --j; } tomb[j+1] = x; } } Egyszerű kiválasztásos rendezésEzt a legegyszerűbb megjegyezni (de ez a leglassabb is). void egyszeru_kivalasztasos_rendezes(int tomb[], int meret) { int i, j, temp; fprintf(stderr, "# egyszeru kivalasztasos rendezes\n"); for (i = 0; i < meret - 1; ++i) { for (j = i + 1; j < meret; ++j) { if (tomb[j] < tomb[i]) { temp = tomb[i]; tomb[i] = tomb[j]; tomb[j] = temp; } } } } Minimumkiválasztásos rendezésvoid minimumkivalasztasos_rendezes(int tomb[], int meret) { int i, j, temp; int minindex; fprintf(stderr, "# minimumkivalasztasos rendezes\n"); for (i = 0; i < meret - 1; ++i) { minindex = i; for (j = i + 1; j < meret; ++j) { if (tomb[j] < tomb[minindex]) { minindex = j; } } if (i != minindex) { temp = tomb[i]; tomb[i] = tomb[minindex]; tomb[minindex] = temp; } } } Buborékrendezésvoid buborek_rendezes(int tomb[], int meret) { int i, j, temp; fprintf(stderr, "# (egyszeru) buborekrendezes\n"); for (i = meret - 1; i >= 1; --i) { for (j = 0; j < i; ++j) { if (tomb[j] > tomb[j+1]) { temp = tomb[j]; tomb[j] = tomb[j+1]; tomb[j+1] = temp; } } } } Javított buborékrendezésvoid javitott_buborek_rendezes(int tomb[], int meret) { int volt_csere = 1; int i = meret - 1; int j; int temp; fprintf(stderr, "# javitott buborekrendezes\n"); while (volt_csere && i >= 0) { volt_csere = 0; j = 0; while (j < i) { if (tomb[j] > tomb[j+1]) { temp = tomb[j]; tomb[j] = tomb[j+1]; tomb[j+1] = temp; /* */ volt_csere = 1; } ++j; } --i; } } A) Shell-rendezés Shell lépésközeivel/* with Shell's original gap sizes */ void shell_sort_shell(int a[], int n) { int g, i, temp, j; int gap; fprintf(stderr, "# Shell rendezes (Shell eredeti lepeskozeivel)\n"); for (gap = n / 2; gap >= 1; gap /= 2) { /* do an insertion sort for each gap size */ i = gap; while (i < n) { temp = a[i]; j = i; while ((j >= gap) && (a[j - gap] > temp)) { a[j] = a[j - gap]; j -= gap; } a[j] = temp; ++i; } } } B) Shell-rendezés Ciura lépésközeivel/* with Ciura's gaps */ void shell_sort_ciura(int a[], int n) { int gaps[] = {701, 301, 132, 57, 23, 10, 4, 1}; int gap_size = sizeof(gaps) / sizeof(int); int g, gap, i, temp, j; fprintf(stderr, "# Shell rendezes (Ciura lepeskozeivel)\n"); for (g = 0; g < gap_size; g++) { gap = gaps[g]; /* do an insertion sort for each gap size */ i = gap; while (i < n) { temp = a[i]; j = i; while ((j >= gap) && (a[j - gap] > temp)) { a[j] = a[j - gap]; j -= gap; } a[j] = temp; ++i; } } } Gyorsrendezés (quicksort)void quicksort(int a[], int bal, int jobb) { int x, temp; int i, j; i = bal; j = jobb; x = a[(bal + jobb) / 2]; while (i <= j) { while (a[i] < x) ++i; while (a[j] > x) --j; if (i <= j) { temp = a[i]; a[i] = a[j]; a[j] = temp; /* */ ++i; --j; } } if (bal < j) quicksort(a, bal, j); if (i < jobb) quicksort(a, i, jobb); } |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |