Algorytm szybkiego sortowania (Quick sort)

Quick sort, to jeden z najszybszych algorytmów sortowania. Pracuje bezpośrednio na tablicy, liście wprowadzonych danych. Jego działanie nie wymaga dodatkowej tablicy na buforowanie sortowanych danych. Wykorzystuje zasadę ?dziel i zwyciężaj?. Złożoność algorytmu jest typu O(n log n).

Opis działania algorytmu szybkiego sortowania

W pierwszym kroku wybierany jest element ze środka zbioru. Wybór tego elementu określa podział zbioru na dwie części- lewa i prawą. Lewa część jest od indeksu zerowego do środkowego, prawy od środkowego do prawego.

Kolejnym krokiem jest przenoszenie mniejszych elementów do lewej części zbioru, a większych do prawej. Wynikiem przeniesienia nie muszą być równoliczne zbiory. Lewa lub prawa część po przenosinach może być mniejsza/ większa jedna od drugiej.

Lewa część zbioru w każdym kroku zawiera elementy mniejsze niż elementy zapisane w prawej części. Kolejnym krokiem jest osobne sortowanie lewej i prawej części.

Schemat algorytmu szybkiego sortowania

Algorytm szybkiego sortowania zapisany rekurencyjnie

Schemat algorytmu szybkiego sortowania Visual studio C#

Kod funkcji algorytmu sortowania szybkiego zapisany w języku C#

Wskazówka:


void qSort_A_Z(Int32[] t,int L,int P)
{
	Int32 bufor, sr, i, j;
	i = L;
	j = P;
	sr = t[(L + P) / 2];//wybierz element ze srodka
	do{
		while (t[i] < sr) i++;
		while (sr < t[j]) j--;
		if (i <= j)
		{
			bufor = t[i];
			t[i] = t[j];
			t[j] = bufor;
			i++;
			j--;
		}//koniec if
	}while (i < j);//koniec do- while i<j
	if (L < j) qSort_A_Z(t, L, j);
	if (i < P) qSort_A_Z(t, i, P);
}

Przykładowa aplikacja wykorzystująca algorytm szybkiego sortowania.

aplikacja wykorzystująca algorytm szybkiego sortowania Visual studio C#

Pełny kod klasy Form utworzonej formatki aplikacji sortującej algorytmem szybkiego sortowania.

Wskazówka:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace _14AlgQsort
{
    public partial class Form1 : Form
    {
        Int32[] tab; //tablica glowna
                    
        int rozmiar;//rozmiar zbioru
        void losujTablice(Int32[] t, int zakres)
        {
            Random r = new Random();
            int i = 0;
            //mogą występować powtórzenia wylosowanych elementów
            while (i < t.Length)
            {
                t[i] = r.Next(zakres) + 1;
                i++;
            }
        }

        void qSort_A_Z(Int32[] t,int L,int P)
        {
            Int32 bufor, sr, i, j;
            i = L;
            j = P;
            sr = t[(L + P) / 2];//wybierz element ze srodka
            do{
                while (t[i] < sr) i++;
                while (sr < t[j]) j--;
                if (i <= j)
                {
                    bufor = t[i];
                    t[i] = t[j];
                    t[j] = bufor;
                    i++;
                    j--;
                }//koniec if
            }while (i < j);//koniec do- while i<j
            if (L < j) qSort_A_Z(t, L, j);
            if (i < P) qSort_A_Z(t, i, P);
        }

        void qSort_Z_A(Int32[] t, int L, int P)
        {
            Int32 bufor, sr, i, j;
            i = L;
            j = P;
            sr = t[(L + P) / 2];//wybierz element ze s?rodka
            do{
                while (t[i] > sr) i++;
                while (sr > t[j]) j--;
                if (i <= j)
                {
                    bufor = t[i];
                    t[i] = t[j];
                    t[j] = bufor;
                    i++;
                    j--;
                }//koniec if
            }while (i < j);//koniec do- while i<j
            if (L < j) qSort_Z_A(t, L, j);
            if (i < P) qSort_Z_A(t, i, P);
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 8) return;//wyskocz na Backspace
            if (e.KeyChar < '0' || e.KeyChar > '9') e.Handled = true;//ignoruj nienumeryczne
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //losowanie nowej tablicy
            if (textBox3.Text.Length < 1) return;
            //wyczysc stara tablice
            if (tab != null) Array.Clear(tab, 0, tab.Length);
            //ustaw nowy rozmiar
            rozmiar = int.Parse(textBox3.Text);
            tab = new int[rozmiar];
            //przy losowaniu ustaw zakres na 2 razy większy od rozmiaru
            losujTablice(tab, 2 * rozmiar);
            //pokaz wylosowany zbior
            textBox1.Clear();
            for (int i = 0; i < tab.Length; i++)
                textBox1.AppendText(tab[i].ToString() + Environment.NewLine);

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //ajk pusta tablica to wyskocz
            if (tab == null) return;
            qSort_A_Z(tab, 0, rozmiar - 1);
            //wypisz posortowaną
            //pokaz wylosowany zbior
            textBox2.Clear();
            for (int i = 0; i < tab.Length; i++)
                textBox2.AppendText(tab[i].ToString() + Environment.NewLine);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //ajk pusta tablica to wyskocz
            if (tab == null) return;
            qSort_Z_A(tab, 0, rozmiar - 1);
            //wypisz posortowaną
            //pokaz wylosowany zbior
            textBox2.Clear();
            for (int i = 0; i < tab.Length; i++)
                textBox2.AppendText(tab[i].ToString() + Environment.NewLine);
        }
    }
}
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz