sortowanie.cc

/*
 * plik ma na celu prezentację podstawowych zagadnień z metod numerycznych (dla C / C++)
 *
 * prezentuje podstawowe metody sortowania
 *
 * Plik stanowi część zbióru funkcji prezentujących podstawy metod numerycznych.
 * Jako że programy te napisałem pewien czas temu nie jestem w stanie obecnie zagwarantować,
 * że działają one w pełni proprawnie. Zachęcam do zapoznania się z skryptem z metod
 * numerycznych dostępnym na stronie http://www.fuw.edu.pl/~pliszka/mn/
 *
 */

  
/*                */
/*   SORTOWANIE   */
/*                */

// dane są zdefiniowanym typem struktury zawierającej numeryczne pole klucz oraz pole na dane ...

void sort_wybor(dane a[], int m) {
  int i, j, min, min_index;
  dane tmp;

  for (j=0; j<m; j++) {
    // znajdujemny najmniejszy w pozostalej czesci tablicy
    min = a[j].klucz;
    min_index = j;
    for (i=j+1; i<m; i++) {
      if (a[i].klucz < min) {
        min = a[i].klucz;
        min_index = i;
      }
    }
    // wpisujemy najmniejszy na j-ta pozycje
    if (j != min_index) {
      tmp = a[j];
      a[j] = a[min_index];
      a[min_index] = tmp;
    }
  }
}

void sort_wstaw(dane a[], int m) {
  int i, j=1;
  dane tmp;

          // znajdujemny najmniejszy i wstawiamy na poczatek
                int min_index = 0;

                for (i=1; i<m; i++) {
                        if (a[i].klucz < a[min_index].klucz) {
                                min_index = i;
                        }
                }
                // wpisujemy najmniejszy na j-ta pozycje
                if (0 != min_index) {
                        tmp = a[0];
                        a[0] = a[min_index];
                        a[min_index] = tmp;
                }
    j=2;


  for (j; j<m; j++){
    i = j-1;
    tmp = a[j];
    while (tmp.klucz < a[i].klucz) {
      a[i+1] = a[i];
      i--;
    }
    a[i+1] = tmp;
  }
}

void sort_Shell(dane a[], int m) {
  int i, j, h;
        dane tmp;

  for (h=1; h<m/9; h=3*h+1);
  for (; h>0; h/=3) {
    // sortowanie przez wstawianie
          for (j=h; j<m; j++){
                  i = j-h;
                  tmp = a[j];
                  while (i>=0 && tmp.klucz < a[i].klucz) {
        a[i+h] = a[i];
                          i-=h;
                  }
                  if(i!=j)
        a[i+h] = tmp;
          }
  }
}

XHTML generated by highlight (http://www.andre-simon.de/) from sortowanie.cc



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/c_cpp/sortowanie.cc) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:41 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).