Sortowanie przez wstawianie (insert sort)

Sortowanie przez wstawianie:

Przykładowy kod programu:

Poniższy kod opiera się na wersji algorytmu, która opiera się na 2 tablicach (podręcznik).

//SORTOWANIE przez wstawianie
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

const int N=200; //ilosc liczb w tablicy
int a[N]; //tablica liczb do posortowania
int b[N]; //tablica liczb posortowanych

void wczytajDane(){
	for(int i = 0; i < N; i++) a[i]=rand()%500;//losowe liczby od 0 do 499
}

void pokazDane(){
	for(int i = 0; i < N; i++) cout << a[i] << " ";
}

void sortWstawianie(){
	int i, j, k, aktualna;
	int posortowane=0; // na początku ilość posortowanych jest 0
	int pktWstawienia; //indeks miejsca wstawienia aklualnej liczby w tablicy b[]
	
	// badamy wszystkie elementy tablicy a[]
	for(i=0; i<N; i++){
		aktualna=a[i]; //aktualna --> dla niej określamy punkt wstawienia w tablicy b[]
		pktWstawienia=posortowane; //domyślnie na koniec tablicy b[]
		
		//ustalenie punktu wstawienia
		for(j=0; j<posortowane; j++){
			if(b[j]>aktualna){
				pktWstawienia=j; //index pierwszego elementu w tablicy b[], który jest większy od liczby aktualnej
				break;
			}
		}
		
		for(k=posortowane; k>pktWstawienia; k--) b[k]=b[k-1]; //przesunięcie elementów tablicy
		b[pktWstawienia]=aktualna; // wstawienie aktualnej liczby 	
		posortowane++; //zwiększenie ilości posortowanych
	}
	
	for(i=0; i<N; i++) a[i]=b[i]; //przepisanie elementów tablicy b[] do tablicy a[]
}

main () {
	srand(time(NULL));
	cout << "\nliczby do posortowania:\n";
	wczytajDane();
	pokazDane();
	sortWstawianie();
	cout << "\nliczby posortowane rosnaco:\n";
	pokazDane();
	return 0;	
}

Dodatki:

Insert-sort with Romanian folk dance

Poniższy film opiera się na wersji algorytmu, która wykorzystuje JEDNĄ tablicę.

Wykorzystanie kodu:

  • Powyższy kod można wykorzystać w środowisku Dev C++ lub innym. Wystarczy utworzyć nowy projekt i wkleić ten kod zamiast istniejącego.
  • Można też użyć kodu na jednej ze stron WWW z kompilatorami on-line, na przykład na stronie: www.cpp.sh