Cuprins Limbajul C

Gandirea algoritmica
Structura unui program si a unei functii in C
Constructiile de bază ale limbajului C – Notiuni generale
Constructiile de baza ale limbajului C – Tipuri de date
Constructiile de baza ale limbajului C – Operatori
Structuri de date – Lista liniara simplu inlantuita
Structuri de date – Stiva (LIFO – Last In First Out)
Structuri de date – Coada (FIFO – First In First Out)
Instructiuni ale limbajului C
Pointeri – Operatori specifici, tablouri, functii
Pointeri – Tipuri structurate de date
Functii de biblioteca
Operatii cu fisiere
Calcul Matriceal – Produsul a doua matrici
Calcul Matriceal – Inversarea unei matrici
Calcul Matricial – Metoda lui Gauss
Metode de sortare – sortare ordinara
Metode de sortare – prin selectie (Selection sort)
Metode de sortare – insertie directa (Direct Insertion Sort)
Metode de sortare – insertie binara (Binary Insertion Sort)
Metode de sortare – insertie directa folosind o santinela
Metode de sortare – metoda bulelor (Bubble Sort)
Metode de sortare – sortare rapida (Quick Sort)
Metode de sortare – prin interclasare (Merge Sort)
Recursivitate (numar factorial, algoritmul lui Euclid recursiv, sirul lui Fibonacci)
Backtracking – permutarile
Backtracking – aranjamente
Backtracking – combinari
Backtracking – problema reginelor
Backtracking – problema labirintului
Backtracking – problema calului
Backtracking – problema mingii
Metoda Divide et Impera – Suma elementelor unui sir
Metoda Divide et Impera – Problema Turnurilor din Hanoi
Metoda Divide et Impera – Elementul maxim intr-un sir
Metoda Divide et Impera – Problema cautarii binare
Grafuri neorientate – parcurgerea in latime
Grafuri neorientate – parcurgerea in adancime
Grafuri neorientate – Drumuri intr-un graf
Grafuri neorientate – ponderate
Grafuri neorientate – hamiltonian
Grafuri neorientate – euleriene
Grafuri neorientate – implementarea unui graf utilizand matricea de adiacenta
Grafuri neorientate – implementarea unui graf utilizand pointeri
Grafuri neorientate – drumul optim intr-un graf

Metode de sortare – sortare ordinara

Cel mai simplu algoritm de sortare (dar şi cel mai ineficient) se bazează pe următorul principiu: un şir este sortat dacă prin parcurgerea lui de la început până la sfârşit, fiecare element este mai mic decât succesorul. Dacă această condiţie nu este îndeplinită, inversăm cele 2 elemente. Sortarea se încheie în momentul în care parcurgerea şirului se face fără a fi necesară nici o inversare (fiecare element este mai mic decât succesorul său).

3 7 < => 4 9 2 8 i=1; inversam a[1]=7 cu a[2]=4; k=1
3 4 7 9 < => 2 8 i=3; inversam a[3]=9 cu a[4]=2; k=1
3 7 4 2 9 < => 8 i=4; inversam a[4]=9 cu a[5]=8; k=1
3 7 < => 4 2 8 9 k<>0 deci pornim un nou ciclu; i=1 inversam a[1]=7 cu a[2]=4; k=1
3 4 7 < => 2 8 9 i=2; inversam a[2]=7 cu a[3]=2; k=1
3 4 < => 2 7 8 9 k<>0 deci pornim un nou ciclu; i=1 inversam a[1]=4 cu a[2]=2; k=1
3 < => 2 4 7 8 9 k<>0 deci pornim un nou ciclu; i=0 inversam a[0]=3 cu a[1]=2; k=1
2 3 4 7 8 9 k ramane 0 (nu facem nici o inversare) deci şirul este sortat


#include "stdio.h"
#include "conio.h"
void sortare_ordinara(int a[], int n)
{
  int i,j,k,elem;
  do
  {
    for(i=0,k=0;i < n-i;i++) Continue reading