<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem quicksort</title>
<link>https://forum.pasja-informatyki.pl/tag/quicksort</link>
<description>Powered by Question2Answer</description>
<item>
<title>sortowanie quicksort i mergesort</title>
<link>https://forum.pasja-informatyki.pl/574893/sortowanie-quicksort-i-mergesort</link>
<description>

&lt;p&gt;Witam, mam do wykonania takie zadanie &quot;Napisz program, który losuje 2 tablice n-elementowe , sortuje je dowolną metodą, która&amp;nbsp;wykorzystuje metodę „quicksort&quot;,&amp;nbsp;a następnie tworzy trzecią tablicę n-elementową,
&lt;br&gt;
składającą się z uporządkowanych n najmniejszych liczb z dwóch pierwszych tablic&quot;. Mianowicie mam napisana taka część kodu, ze wyświetla tylko jedna tablice posortowana, a reszty już nie. Macie pomysł jak to uzupełnić?&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
using namespace std;
const int N=20;

void Losuj (int A[]) 
{
for (int i=0;i&amp;lt;N;i++)
A[i]=1+rand () % 99;
}

void Wypisz (int A[]) 
{
for (int i=0;i&amp;lt;N;i++)
{
    cout &amp;lt;&amp;lt;A[i] &amp;lt;&amp;lt;&quot; &quot;;
} 
{ 
    cout&amp;lt;&amp;lt;endl;
}}
void Merge(int A[], int p, int s, int k)
{
int i=p, j=s+1, m=p;
int B[N];
while (i&amp;lt;=s &amp;amp;&amp;amp; j&amp;lt;=k)
{
if (A[i]&amp;lt;A[j])
{
B[m]=A[i]; i++;
}
else
{
B[m]=A[j]; j++;
}
m++;
}
while (i&amp;lt;=s)
{
B[m]=A[i]; i++;m++;
}
while (j&amp;lt;=k)
{
B[m]=A[j]; j++;m++;
}
for (i=p;i&amp;lt;=k; i++) A[i]=B[i];
}
void MergeSort(int A[], int p, int k)
{
if (p&amp;lt;k)
{
int s=(p+k)/2;
MergeSort(A,p,s);
MergeSort(A,s+1,k);
Merge(A,p,s,k);
}

}

void Quicksort (int A[], int p, int k)
{
int i=p, j=k, m =A[(p+k)/2];
while (i&amp;lt;=j)
{
while (A[i] &amp;lt;m) i++;
while (A[j]&amp;gt;m) j--;
if (i&amp;lt;=j)
{
swap (A[i],A[j]);
i++;j--;
}
}
if (p&amp;lt;j) Quicksort (A, p, j);
if (i&amp;lt;k) Quicksort (A, i, k);
}

int main()
{
int A[N]; 
srand (time (NULL));
Losuj (A);
Wypisz (A);
MergeSort(A,0,N-1);
Merge(A,0,N-1,0);
Quicksort(A,0,N-1);
Wypisz (A);
return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/574893/sortowanie-quicksort-i-mergesort</guid>
<pubDate>Tue, 15 Nov 2022 20:53:02 +0000</pubDate>
</item>
<item>
<title>piwot ustawiony na pierwszy element</title>
<link>https://forum.pasja-informatyki.pl/557656/piwot-ustawiony-na-pierwszy-element</link>
<description>W quicksort, jeśli chcę ustawić piwot na pierwszy element w jakiejś tablicy np. 15,12,13,11,20,15,22,14 to jest to 15. &lt;br /&gt;
&lt;br /&gt;
i teraz gdy rozbijam na dwa podproblemy (ustawiam i na pierwszy element i j na ostatni element tablicy i sprawdzam większość oraz mniejszość i ewentualnie zamieniam elementy). W ten sposób dostałem dwa podproblemy: &lt;br /&gt;
&lt;br /&gt;
14 12 13 11 &amp;nbsp;&amp;nbsp;15(piwot) &amp;nbsp;&amp;nbsp;&amp;nbsp;15 22 20&lt;br /&gt;
&lt;br /&gt;
i tutaj znowu dzieliłbym na dwa kolejne podproblemy i w efekcie dostałbym uporządkowaną tablicę. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Pytanie, dlaczego powinno być &lt;br /&gt;
&lt;br /&gt;
13 12 14 11 &amp;nbsp;&amp;nbsp;&amp;nbsp;15 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;20 15 &amp;nbsp;22, bo taka jest poprawna odpowiedź.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Mógłby mi ktoś wytłumaczyć, jak posortować tablicę gdy ustawiamy ten piwot na pierwszy element np. na przykładzie tej tablicy?</description>
<category>Rozwój zawodowy, nauka, praca</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/557656/piwot-ustawiony-na-pierwszy-element</guid>
<pubDate>Sun, 26 Dec 2021 16:58:54 +0000</pubDate>
</item>
<item>
<title>Quicksort w konsoli C++</title>
<link>https://forum.pasja-informatyki.pl/547620/quicksort-w-konsoli-c</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;po wielu trudach zrozumiałem działanie algorytmu sortowania szybkiego, jednak nie potrafię dostrzec błędu w moim kodzie:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;time.h&amp;gt;

using namespace std;

void quicksort(int *tablica, int poczatek, int koniec) {
	int pivot = tablica[(poczatek - koniec) / 2];
	int i, j, x;
	i = poczatek;
	j = koniec;
	do {
		while (tablica[i] &amp;lt; pivot) i++;
		while (tablica[j] &amp;gt; pivot)  j--;
		if (i &amp;lt;= j) {
			x = tablica[i];
			tablica[i] = tablica[j];
			tablica[j] = x;
		}
		} while (i &amp;lt;= j);
		if (j &amp;gt; poczatek) quicksort(tablica, poczatek, j);
		if (i &amp;lt; koniec) quicksort(tablica, i, koniec);
	}

int main() {
	srand(time(NULL));
	int ile;
	cout &amp;lt;&amp;lt; &quot;Ile liczb:&quot;;
	cin &amp;gt;&amp;gt; ile;
	int* tablica = new int[ile];
	cout &amp;lt;&amp;lt; &quot;\n Przed sortowaniem: &quot;;
	for (int i(0); i &amp;lt; ile; i++) {
		tablica[i] = rand() % 100;
		cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; tablica[i];
	}
	quicksort(tablica, 0, ile - 1);
	cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &quot;Po sortowaniu:&quot;;
	for (int i(0); i &amp;lt; ile; i++) {
	
		cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; tablica[i];
	}
	return 0;
}&lt;/pre&gt;



&lt;p&gt;Konsola wypisuje liczby z pierwszego for'a, następnie program zawiesza się. Wiele wskazuje na to, że dzieje się to w linijce wywołującej funkcję quicksort().&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/547620/quicksort-w-konsoli-c</guid>
<pubDate>Mon, 26 Jul 2021 17:32:45 +0000</pubDate>
</item>
<item>
<title>Zadanie - Algorytm QuickSort</title>
<link>https://forum.pasja-informatyki.pl/523885/zadanie-algorytm-quicksort</link>
<description>

&lt;p&gt;Witajcie,&lt;/p&gt;



&lt;p&gt;Prosiłbym o pomoc, gdyż męczę się już z tym kupę czasu i nie mogę dojść do winy problemu. Zadanie polega na implementacji algorytmu&amp;nbsp;QuickSort, który zwróci nam posortowaną tablicę, nie zmieniając nic w tabeli wejściowej. Mógłby ktoś spojrzeć i powiedzieć mi gdzie popełniłem błąd? Algorytm w tym przypadku sortuje prawidłowo do pewnego momentu, lecz z niewiadomych mi przyczyn nie przerywa w tym momencie i próbuje jeszcze kilkukrotnie dalej sortować dając na wyjściu zły wynik. O dziwo problem nie występuje, gdy nie próbuję zrobić wewnątrz funkcji kopii listy i operuję na oryginalnej tablicy.&lt;/p&gt;



&lt;p&gt;Z góry bardzo dziękuję :)&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
from typing import List
Y = [2, 25, 9, 14, 1, 3, 10]  #tablica do posortowania

def quicksort(I: List[int], start: int, stop: int) -&amp;gt; List[int]:
    copy_I = I[:]  #kopia listy na której będę operował
    i = start
    j = stop
    pivot = copy_I[(start + stop) // 2]

    while i &amp;lt;= j:
        while copy_I[i] &amp;lt; pivot:
            i += 1
        while copy_I[j] &amp;gt; pivot:
            j -= 1
        if i &amp;lt;= j:
            copy_I[i], copy_I[j] = copy_I[j], copy_I[i]
            i += 1
            j -= 1

    if start &amp;lt; j:
        quicksort(copy_I, start, j)
    if i &amp;lt; stop:
        quicksort(copy_I, i, stop)
    return copy_I

print(quicksort(Y,0,len(Y)-1))&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/523885/zadanie-algorytm-quicksort</guid>
<pubDate>Wed, 06 Jan 2021 13:49:29 +0000</pubDate>
</item>
<item>
<title>sortowanie c++ quick sort</title>
<link>https://forum.pasja-informatyki.pl/513000/sortowanie-c-quick-sort</link>
<description>

&lt;p&gt;Cześć uczę się ostatnio algorytmów sortowania i napisałem quick sorta chciałbym się dowiedzieć czy algorytm działa poprawnie a jeśli tak czy da się go w jakiś sposób udoskonalić oto kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

int rozdzielanie(int *tab, int l, int r) {

    int q = r - 1;

    while (l != q) {
        if (tab[l] &amp;gt; tab[r]) {
            while (tab[q] &amp;gt; tab[r] &amp;amp;&amp;amp; q &amp;gt; l) q--;
            if (q &amp;gt; l) swap(tab[l],tab[q]);
        }
        if (q &amp;gt; l) l++;
    }
    if (tab[l] &amp;gt; tab[r]) {
        swap(tab[l],tab[r]);
        return l;
    }
    return l+1;
}

void sortowanie_szybkie(int *tab, int l, int r) {

    if (l &amp;lt; r) {
        int q = rozdzielanie(tab,l,r);
        sortowanie_szybkie(tab,l,q-1);
        sortowanie_szybkie(tab,q+1,r);
    }
}

int main()
{
    int n,l = 0;

    cin &amp;gt;&amp;gt; n;

    int *tab = new int[n];

    for (int i = 0; i &amp;lt; n; i++) cin &amp;gt;&amp;gt; tab[i];
    sortowanie_szybkie(tab,l,n-1);
    for (int i = 0; i &amp;lt; n; i++) cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; &quot;\n&quot;;
    cout &amp;lt;&amp;lt; &quot;\n&quot;;

    return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/513000/sortowanie-c-quick-sort</guid>
<pubDate>Thu, 22 Oct 2020 18:19:19 +0000</pubDate>
</item>
<item>
<title>implementacja quicksort.</title>
<link>https://forum.pasja-informatyki.pl/496157/implementacja-quicksort</link>
<description>

&lt;p&gt;Witam!&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Chciałbym dowiedzieć się jaki problem&amp;nbsp;występuje w tym kodzie. W build log nie ma żadnych błędów.Chodzi o to, że po wypisaniu tablicy nie uporządkowanej konsola się zamyka.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;windows.h&amp;gt;
using namespace std;

void sortowanie(int *tab, int lewy, int prawy)
{
    int S = tab[(lewy+prawy)/2];
    int bufor;
    int l=lewy;
    int p=prawy;

    do
    {
        while(tab[l]&amp;lt;S)
            l++;
        while(tab[p]&amp;gt;S)
            p++;

        if(l&amp;lt;=p)
        {
            bufor=tab[l];
            tab[l]=tab[p];
            tab[p]=bufor;
            l++;
            p--;
        }
    }
    while(l&amp;lt;=p);

    if(p&amp;gt;lewy)
        sortowanie(tab,lewy, p);
    if(l&amp;lt;prawy)
        sortowanie(tab, l, prawy);
}


int main()
{
    srand(time(0));

    int ile;
    cout&amp;lt;&amp;lt;&quot;ile liczb: &quot;;
    cin&amp;gt;&amp;gt;ile;

    int* tab;
    tab= new int[ile];

    for(int i=0; i&amp;lt;=ile-1; i++)
    {
        tab[i]=rand()%100+1;
    }

    for(int i=0; i&amp;lt;=ile-1; i++)
    {
        cout&amp;lt;&amp;lt;tab[i]&amp;lt;&amp;lt;&quot; &quot;;
    }

    sortowanie(tab, 0, ile-1);

    for(int i=0; i&amp;lt;=ile-1; i++)
    {
        cout&amp;lt;&amp;lt;tab[i]&amp;lt;&amp;lt;&quot; &quot;;
    }

    delete [] tab;
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/496157/implementacja-quicksort</guid>
<pubDate>Sat, 27 Jun 2020 12:12:46 +0000</pubDate>
</item>
<item>
<title>Algorytm quicksort</title>
<link>https://forum.pasja-informatyki.pl/483956/algorytm-quicksort</link>
<description>

&lt;p&gt;Mam pewne pytanie.&lt;/p&gt;



&lt;p&gt;Znalazłem w internecie taki schemat sortowania przez scalanie. Otóż zastanawiam się czy quicksort wykorzystuje scalanie dwóch ciągów uporządkowanych. W quicksort występuje &quot;dzielenie&quot; problemu na mniejsze. Ale czy quicksort wykorzystuje scalanie posortowanych ciągów?&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=12999473621652658322&quot; style=&quot;height:640px; width:400px&quot;&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/483956/algorytm-quicksort</guid>
<pubDate>Thu, 23 Apr 2020 12:20:13 +0000</pubDate>
</item>
<item>
<title>Sortowanie- Bubble, Quick, Insertion- porówanie czasów</title>
<link>https://forum.pasja-informatyki.pl/479854/sortowanie-bubble-quick-insertion-porowanie-czasow</link>
<description>

&lt;p&gt;Witam, porównuję czasy sortowania poszczególnych algorytmów i z tego co się orientuję to QuickSort powinno być najszybsze .. natomiast u mnie najlepiej wypada Insertion Sort. Może mam coś nie tak z algorytmem Quick?&lt;/p&gt;



&lt;pre class=&quot;brush:java;&quot;&gt;
import java.util.Random;

public class Main {

    public static void main(String[] args) {
        Random random = new Random();
        int[] arrayToSort = new int[10000];
        int[] unsortedArray;
        for (int i = 0; i &amp;lt; 10000; i++) {
            arrayToSort[i] = random.nextInt(10000);
            System.out.print(arrayToSort[i] + &quot;, &quot;);
        }
        unsortedArray = arrayToSort;
        System.out.println(&quot; &quot;);
        System.out.println(&quot;---------------&quot;);
        long timeBeforeBubbleSort = System.nanoTime();
        arrayBubbleSort(arrayToSort);
        long timeAfterBubbleSort = System.nanoTime();
        System.out.println(&quot;Bubble sort: &quot;);
        for (int sort : arrayToSort) {
            System.out.print(sort + &quot;, &quot;);
        }
        System.out.println(&quot; &quot;);
        System.out.println(&quot;Czas sortowania bąbelkowego: &quot; + calculateTimeOfSorting(timeBeforeBubbleSort, timeAfterBubbleSort)
        );
        arrayToSort = unsortedArray;
        System.out.println(&quot;---------------&quot;);
        long timeBeforeInsertionSort = System.nanoTime();
        arrayInsertionSort(arrayToSort);
        long timeAfterInsertionSort = System.nanoTime();
        System.out.println(&quot;Insertion sort: &quot;);
        for (int sort : arrayToSort) {
            System.out.print(sort + &quot;, &quot;);
        }
        System.out.println(&quot; &quot;);
        System.out.println(&quot;Czas sortowania przez  wstawianie: &quot; + calculateTimeOfSorting(timeBeforeInsertionSort, timeAfterInsertionSort));
        arrayToSort = unsortedArray;
        System.out.println(&quot;---------------&quot;);
        long timeBeforeQuickSort = System.nanoTime();
        arrayQuickSort(arrayToSort, 0, arrayToSort.length - 1);
        long timeAfterQuickSort = System.nanoTime();
        System.out.println(&quot;Quick sort: &quot;);
        for (int sort : arrayToSort) {
            System.out.print(sort + &quot;, &quot;);
        }
        System.out.println(&quot; &quot;);
        System.out.println(&quot;Czas sortowania szybkiego: &quot; + calculateTimeOfSorting(timeBeforeQuickSort, timeAfterQuickSort));


    }

    public static void arrayBubbleSort(int[] arrayToSort) {
        for (int i = 0; i &amp;lt; arrayToSort.length; i++) {
            for (int j = 0; j &amp;lt; arrayToSort.length - 1; j++) {
                if (arrayToSort[j] &amp;gt; arrayToSort[j + 1]) {
                    int temp = arrayToSort[j];
                    arrayToSort[j] = arrayToSort[j + 1];
                    arrayToSort[j + 1] = temp;
                }
            }
        }
    }

    public static void arrayInsertionSort(int[] arrayToSort) {
        int currentNumber, otherIndex;
        for (int i = 1; i &amp;lt; arrayToSort.length; i++) {
            currentNumber = arrayToSort[i];
            otherIndex = i;
            while (otherIndex &amp;gt; 0 &amp;amp;&amp;amp; currentNumber &amp;lt; arrayToSort[otherIndex - 1]) {
                arrayToSort[otherIndex] = arrayToSort[otherIndex - 1];
                otherIndex--;
            }
            arrayToSort[otherIndex] = currentNumber;
        }
    }

    public static void arrayQuickSort(int[] arrayToSort, int left, int right) {
        if (left &amp;gt;= right) {
            return;
        }
        int pivotValue = arrayToSort[right];
        int border = left - 1;
        int i = left;

        while (i &amp;lt; right) {
            if (arrayToSort[i] &amp;lt; pivotValue) {
                border++;
                if (border != i) {
                    int temp = arrayToSort[border];
                    arrayToSort[border] = arrayToSort[i];
                    arrayToSort[i] = temp;
                }
            }
            i++;
        }
        border++;
        if (border != right) {
            int temp = arrayToSort[border];
            arrayToSort[border] = arrayToSort[right];
            arrayToSort[right] = temp;
        }

        arrayQuickSort(arrayToSort, left, border - 1);
        arrayQuickSort(arrayToSort, border + 1, right);
    }

    public static long calculateTimeOfSorting(long timeBefore, long timeAfter) {
        long difference = timeAfter - timeBefore;
        long timeOfSortingToMicroseconds = (long) (difference* 0.001);
        return timeOfSortingToMicroseconds;

    }
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Java</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/479854/sortowanie-bubble-quick-insertion-porowanie-czasow</guid>
<pubDate>Thu, 02 Apr 2020 09:32:07 +0000</pubDate>
</item>
<item>
<title>Sortowanie quicksort</title>
<link>https://forum.pasja-informatyki.pl/478798/sortowanie-quicksort</link>
<description>

&lt;p&gt;&lt;span style=&quot;font-size:20px&quot;&gt;Słyszałem, że quicksortem nie można posortować 1e9 i większych liczb. Czy to prawda? Jeśli tak to jakie inne szybkie sortowanie jest jeszcze dostępne.&lt;/span&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/478798/sortowanie-quicksort</guid>
<pubDate>Sat, 28 Mar 2020 17:14:51 +0000</pubDate>
</item>
<item>
<title>sortowanie quicksort 3 podanych przed uzytkownika cyfr w języku c</title>
<link>https://forum.pasja-informatyki.pl/457407/sortowanie-quicksort-3-podanych-przed-uzytkownika-cyfr-w-jezyku-c</link>
<description>

&lt;p&gt;Jak ma wyglądać algorytm sortowania quicksort 3 podanych przez uzytkownika &amp;nbsp;calkowitych liczb w jezyku c?
&lt;br&gt;

&lt;br&gt;
&amp;nbsp;
&lt;br&gt;

&lt;br&gt;
Proszę nie krzyczeć jestem poczatkujący :))&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;background-color:#ffd700&quot;&gt;&amp;nbsp;co tu trzeba pozmieniać żeby algorytm działał:&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;background-color:#fff0f5&quot;&gt;To jest w języku c++ o którym nic nie mam pojęcia:(&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;int partition(int tablica[], int p, int r) // dzielimy tablice na dwie czesci, w pierwszej wszystkie liczby sa mniejsze badz rowne x, w drugiej wieksze lub rowne od x&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;int x = tablica[p]; // obieramy x&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;int i = p, j = r, w; // i, j - indeksy w tabeli&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;while (true) // petla nieskonczona - wychodzimy z niej tylko przez return j &lt;/span&gt;&lt;span style=&quot;background-color:#00ff00&quot;&gt;nie wiem co tu zmienic&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;while (tablica[j] &amp;gt; x) // dopoki elementy sa wieksze od x&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;j--;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;while (tablica[i] &amp;lt; x) // dopoki elementy sa mniejsze od x&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;i++;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;if (i &amp;lt; j) // zamieniamy miejscami gdy i &amp;lt; j&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;w = tablica[i];&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;tablica[i] = tablica[j];&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;tablica[j] = w;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;i++;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;j--;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;}&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;else // gdy i &amp;gt;= j zwracamy j jako punkt podzialu tablicy&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;return j;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;}&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;}&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;void quicksort(int tablica[], int p, int r) // sortowanie szybkie&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;int q;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;if (p &amp;lt; r)&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;{ &amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;q = partition(tablica,p,r); // dzielimy tablice na dwie czesci; q oznacza punkt podzialu&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;quicksort(tablica, p, q); // wywolujemy rekurencyjnie quicksort dla pierwszej czesci tablicy&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;quicksort(tablica, q+1, r); // wywolujemy rekurencyjnie quicksort dla drugiej czesci tablicy&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;}&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;}&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;int main()&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;int ilosc_liczb, i;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;cout &amp;lt;&amp;lt; &quot;Podaj ilosc licz do posortowania: &quot;;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;cin &amp;gt;&amp;gt; ilosc_liczb;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;int *tablica = new int [ilosc_liczb]; // utworzenie dynamicznej tablicy na 'ilosc_liczb' elementow&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;for (i = 0; i &amp;lt; ilosc_liczb; i++) // wczytywanie liczb do tablicy&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;{&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;cout &amp;lt;&amp;lt; &quot;Podaj liczba: &quot;;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;cin &amp;gt;&amp;gt; tablica[i];&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;}&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;quicksort(tablica,0,ilosc_liczb-1); // wywolanie funkcji sortujacej&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;for (i = 0; i &amp;lt; ilosc_liczb; i++) // wypisanie posortowanej tablicy&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;cout &amp;lt;&amp;lt; &quot;tablica[&quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;] = &quot; &amp;lt;&amp;lt; tablica[i] &amp;lt;&amp;lt; endl; &lt;/span&gt;&lt;span style=&quot;background-color:#ff8c00&quot;&gt;nie wiem co tu zmienic&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;delete [] tablica; // zwolnienie tablicy zaalokowanej dynamicznie&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#f0f8ff&quot;&gt;return 0;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#fff0f5&quot;&gt;}&lt;/span&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/457407/sortowanie-quicksort-3-podanych-przed-uzytkownika-cyfr-w-jezyku-c</guid>
<pubDate>Sat, 09 Nov 2019 20:40:51 +0000</pubDate>
</item>
<item>
<title>Quicksort źle segreguje tablicę z losowych liczb C++</title>
<link>https://forum.pasja-informatyki.pl/449180/quicksort-zle-segreguje-tablice-z-losowych-liczb-c</link>
<description>

&lt;p&gt;Cześć,&lt;/p&gt;



&lt;p&gt;Uczę się programowania i mam problem, którego nie mogę rozwiązać. Chciałem napisać program na zasadzie Totolotka. Program pobiera 6 liczb od użytkownika. Sam też generuje 6 liczb losowych. Wyniki są zapisane w dwóch oddzielnych tablicach, a następnie są sortowane i wyniki z obu tablic są porównywane. Program bez problemu generuje liczby losowe. Jednak gdy ma je posortować to się wykrzacza. Nie wiem czemu ale gdy robię to samo dla liczb podanych przez użytkownika to wszystko jest ok. Z góry dzięki za pomoc.&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;cstdlib&amp;gt;

using namespace std;

void quicksort(int *tablica, int lewy, int prawy)
{
	int v = tablica[(lewy + prawy) / 2];
	int i, j, x;
	i = lewy;
	j = prawy;
	do
	{
		while (tablica[i] &amp;lt; v) i++;
		while (tablica[j] &amp;gt; v) j--;
		if (i &amp;lt;= j)
		{
			x = tablica[i];
			tablica[i] = tablica[j];
			tablica[j] = x;
			i++;
			j--;
		}
	} while (i &amp;lt;= j);
	if (j &amp;gt; lewy) quicksort(tablica, lewy, j);
	if (i &amp;lt; prawy) quicksort(tablica, i, prawy);
}

int main()
{
	srand(time(NULL));
	int tablica[6];
	int tablica2[6];

	cout &amp;lt;&amp;lt; &quot;Witam wszystkich na losowaniu duzego lottka.&quot; &amp;lt;&amp;lt; endl;
	cout &amp;lt;&amp;lt; &quot;Podaj prosze 6 liczb z zakresu od 1 do 49 i zobaczymy czy to tobie sprzyja dzis szczescie.&quot; &amp;lt;&amp;lt; endl;
	cout &amp;lt;&amp;lt; &quot;Pierwsza liczba:&quot;;
	cin &amp;gt;&amp;gt; tablica2[0];
	cout &amp;lt;&amp;lt; &quot;Druga liczba:&quot;;
	cin &amp;gt;&amp;gt; tablica2[1];
	cout &amp;lt;&amp;lt; &quot;Trzecia liczb:&quot;;
	cin &amp;gt;&amp;gt; tablica2[2];
	cout &amp;lt;&amp;lt; &quot;Czwarta liczba:&quot;;
	cin &amp;gt;&amp;gt; tablica2[3];
	cout &amp;lt;&amp;lt; &quot;Piata liczba:&quot;;
	cin &amp;gt;&amp;gt; tablica2[4];
	cout &amp;lt;&amp;lt; &quot;Szosta liczba:&quot;;
	cin &amp;gt;&amp;gt; tablica2[5];
	for (int i = 0; i &amp;lt; 6; i++)
	{
		do
		tablica[i] = rand() % 49 + 1;
		while (tablica[0] == tablica[1] == tablica[2] == tablica[3] == tablica[4] == tablica[5]);
		quicksort(tablica, 0, 5);


		cout &amp;lt;&amp;lt; tablica[i] &amp;lt;&amp;lt; &quot; &quot;;
	}
	cin.get();
	return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/449180/quicksort-zle-segreguje-tablice-z-losowych-liczb-c</guid>
<pubDate>Thu, 12 Sep 2019 12:30:18 +0000</pubDate>
</item>
<item>
<title>Quicksort - błąd wykonania</title>
<link>https://forum.pasja-informatyki.pl/412641/quicksort-blad-wykonania</link>
<description>

&lt;p&gt;Witam. Mam&amp;nbsp;problem z moją implementacją quicksorta. Jak&amp;nbsp;odpalam u siebie wszystko jest ok, nie udało mi się znaleźć zestawu danych, który powoduje wysypanie się programu. Na SPOJu&amp;nbsp;dostaję&amp;nbsp;jednak komunikat &quot;błąd wykonania &lt;a rel=&quot;nofollow&quot; href=&quot;https://en.wikipedia.org/wiki/SIGSEGV&quot;&gt;(SIGSEGV)&lt;/a&gt;&quot;. Co może być nie tak w tym kodzie? Wpatruję się w niego dłuższy czas i nie widzę co powoduje błąd.&lt;/p&gt;



&lt;p&gt;(Kod jest częścią większego zadania, wiem że błąd jest gdzieś w tym miejscu bo po podmianie na InsertionSort SPOJ akceptuje rozwiązanie)&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void QuickSort(int* arr, int l, int r){
	if(l &amp;gt;= r) return;
	int
		i = l - 1,
		j = r + 1,
		pivot = arr[(l + r) / 2];

	while(true){
		while(arr[++i] &amp;lt; pivot);
		while(arr[--j] &amp;gt; pivot);

		if(i &amp;lt;= j) swap(arr[i], arr[j]);
		else break;
	}

	if(j &amp;gt; l) QuickSort(arr, l, j);
	if(i &amp;lt; r) QuickSort(arr, i, r);
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/412641/quicksort-blad-wykonania</guid>
<pubDate>Fri, 08 Feb 2019 15:10:01 +0000</pubDate>
</item>
<item>
<title>Pokazanie kroków algorytmu quicksort</title>
<link>https://forum.pasja-informatyki.pl/390546/pokazanie-krokow-algorytmu-quicksort</link>
<description>

&lt;p&gt;Witam, otóż studiuję matematykę stosowaną i na przedmiocie algorytmy i struktury danych dostałem do napisania algorytm quicksort, program jednak oprócz zwykłego sortowania ma pokazywać każdy krok jaki algorytm ten wykonuję więc muszę wyświetlać oprócz gotowego i posortowanego zbioru również podzbiory na jakie główny zbiór zostaje podzielony. Niestety nie mam pojęcia jak to zrobić, sam algorytm udało mi się napisać i działa chyba poprawnie, niestety gdy próbuję modyfikować go tak aby wyświetlał pojedyńcze podzbiory to nie wyświetla je w postaci nieskładnego ciągu cyfr, próbuję wstawić cout w miejscu gdzie dokonuję dzielenia na partycję ale to nie działa tak jak myślałem,Próbowałem już różnych rozwiązań ale nie potrafię nic wykombinować,Wklejam kod działającego programu&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

void Sortowanie( int tab[], int left, int right )
{
    int i = left;
    int j = right;
    int x = tab[( left + right ) / 2 ];
    do
    {
        while( tab[ i ] &amp;lt; x )
             i++;

        while( tab[ j ] &amp;gt; x )
             j--;


        if( i &amp;lt;= j )
        {
            swap( tab[ i ], tab[ j ] );

            i++;
            j--;
        }
    }
    while( i &amp;lt;= j );

    if( left &amp;lt; j )  Sortowanie( tab, left, j );
        cout &amp;lt;&amp;lt; tab[i];
    if( right &amp;gt; i )  Sortowanie( tab, i, right );
        cout &amp;lt;&amp;lt; tab[j];
}
int main()
{

    int ilosc_liczb, i;
cout &amp;lt;&amp;lt; &quot;Podaj ilosc licz do posortowania: &quot;;
cin &amp;gt;&amp;gt; ilosc_liczb;
int *tablica = new int [ilosc_liczb]; // utworzenie dynamicznej tablicy na 'ilosc_liczb' elementow

for (i = 0; i &amp;lt; ilosc_liczb; i++) // wczytywanie liczb do tablicy
{
cout &amp;lt;&amp;lt; &quot;Podaj liczbe &quot;;
cin &amp;gt;&amp;gt; tablica[i];
}
cout &amp;lt;&amp;lt; &quot;TABLICA PRZED SORTOWANIEM&quot; &amp;lt;&amp;lt; endl;
 for(i = 0; i&amp;lt;ilosc_liczb; i++)
{
  cout &amp;lt;&amp;lt; tablica[i] &amp;lt;&amp;lt; &quot; &quot;;
}
cout &amp;lt;&amp;lt; endl;
Sortowanie(tablica,0,ilosc_liczb-1);
cout &amp;lt;&amp;lt; &quot;TABLICA POSORTOWANA&quot; &amp;lt;&amp;lt; endl;
for (i = 0; i &amp;lt; ilosc_liczb; i++) // wypisanie posortowanej tablicy
cout  &amp;lt;&amp;lt; tablica[i] &amp;lt;&amp;lt; &quot;  &quot;;

delete [] tablica; // usuniecie tablicy zaalokowanej dynamicznie

return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/390546/pokazanie-krokow-algorytmu-quicksort</guid>
<pubDate>Fri, 02 Nov 2018 17:51:56 +0000</pubDate>
</item>
<item>
<title>Quicksort - sortowanie struktury</title>
<link>https://forum.pasja-informatyki.pl/360468/quicksort-sortowanie-struktury</link>
<description>

&lt;p&gt;Musze wykonać sortowanie struktury za pomocą Quicksorta. Jest to struktura z książkami (tytuł, autor, rok wydania, cena). Wiem, że istnieje w C funkcja qsort, ale niestety nie mogę nią zrobić tego zadania, bo potrzebuje zliczyć liczbę porównań oraz zamian.&lt;/p&gt;



&lt;p&gt;Na jakiej zasadzie powinienem podstawiać zmienną pivot? Teraz mam to zrobione tak i niestety wywala błędy w&amp;nbsp; kompilatorze&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
int partition(struct daneks X[], int low, int high)
{
&amp;nbsp; &amp;nbsp; char pivot[MAX_TYTUL] = X[low];
&amp;nbsp; &amp;nbsp; char tytul[MAX_TYTUL];
&amp;nbsp; &amp;nbsp; int i = low-1, j = high+1;

&amp;nbsp; &amp;nbsp; while(i&amp;lt;j) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while(X[--j]&amp;gt;pivot[MAX_TYTUL])
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while(X[++i]&amp;lt;pivot[MAX_TYTUL])
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(i&amp;lt;j)
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(tytul, X[i].tytul);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(X[i].tytul, X[j].tytul);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;strcpy(X[j].tytul, tytul);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; return j;
}

void quicksort(struct daneks X[], int low, int high)
{
&amp;nbsp; &amp;nbsp; if(low&amp;lt;high) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int partition_index = partition(X,low,high);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; quicksort(X, low, partition_index);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; quicksort(X, partition_index+1, high);
&amp;nbsp; &amp;nbsp; }
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/360468/quicksort-sortowanie-struktury</guid>
<pubDate>Sun, 24 Jun 2018 12:21:49 +0000</pubDate>
</item>
<item>
<title>Quicksort i Heapsort jak pokazać że są niestabilne?</title>
<link>https://forum.pasja-informatyki.pl/360418/quicksort-i-heapsort-jak-pokazac-ze-sa-niestabilne</link>
<description>Mam za zadanie aby stworzyć strukturę przechowująca książki (tytuł, autor, rok wydania, cena), później posortować dane algorytmem quicksort oraz heapsort (alfabetycznie po tytułach), a następnie tak dobrać dane, aby pokazać, że są one niestabilne. Podpowie mi ktoś w jaki sposób mogę to zrobić?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/360418/quicksort-i-heapsort-jak-pokazac-ze-sa-niestabilne</guid>
<pubDate>Sun, 24 Jun 2018 10:38:01 +0000</pubDate>
</item>
<item>
<title>quicksort - liczniki</title>
<link>https://forum.pasja-informatyki.pl/356239/quicksort-liczniki</link>
<description>

&lt;p&gt;Cześć mam pytanie. Czy liczniki które mam w kodzie dobrze liczą ilość zamian i porównań?&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
int counter,changes;

void quicksortMW(int_array_type array, int low, int high)
{
    if(low&amp;lt;high) {
        int partition_index = partitionMW(array,low,high);
        quicksortMW(array, low, partition_index);
        quicksortMW(array, partition_index+1, high);
    }
}

int partitionMW(int_array_type array, int low, int high)
{
    int pivot = array[low];
    int i = low-1, j = high+1;

    while(i&amp;lt;j) {
        while(array[--j]&amp;gt;pivot)
           ;
        while(array[++i]&amp;lt;pivot)
            ;counter++;
        if(i&amp;lt;j){
            swap(&amp;amp;array[i],&amp;amp;array[j]);
            changes++;

        }
    }
    return j;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/356239/quicksort-liczniki</guid>
<pubDate>Thu, 07 Jun 2018 17:15:22 +0000</pubDate>
</item>
<item>
<title>quicksort rekurencja</title>
<link>https://forum.pasja-informatyki.pl/356040/quicksort-rekurencja</link>
<description>

&lt;p&gt;Witam, muszę zadać to pytanie bo pogubiłem się w zrozumieniu wywołań rekurencyjnych.&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Wszystko do tej pory rozumiem, ale nie potrafie zrozumieć dlaczego skąd bierze się ostatnie wywołanie rekurencyjne dla algorytmu quick sort. Kod zamieszczam poniżej, służy on do nauki krok po kroku co się dzieje w kodzie, mam nadzieje że, kod jest w miare czytelny.&amp;nbsp;&lt;img alt=&quot;yes&quot; src=&quot;https://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/thumbs_up.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;yes&quot;&gt;&lt;/p&gt;



&lt;p&gt;(A dokładniej skąd w ostanim wywołaniu rekurencyjnym bierze się wartość dla&amp;nbsp; prawy = 3,&amp;nbsp; i&amp;nbsp; = 2&amp;nbsp; ) ???&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;                 //KOD DO NAUKI
#include &amp;lt;cstdio&amp;gt;

using namespace std;

void quicksort(int *tablica, int lewy, int prawy)
{
    int pivot = tablica[(lewy + prawy)/2];
    int i,j;
    i=lewy;
    j=prawy;

    cout &amp;lt;&amp;lt; &quot;---------------------------------------------------&quot; &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;lewy;                                   = &quot; &amp;lt;&amp;lt; lewy  &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;prawy;                                  = &quot; &amp;lt;&amp;lt; prawy &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;int pivot = tablica[(lewy + prawy)/2];  = &quot; &amp;lt;&amp;lt; pivot &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;int i=lewy;                             = &quot; &amp;lt;&amp;lt; i     &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;int j=prawy;                            = &quot; &amp;lt;&amp;lt; j     &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;---------------------------------------------------&quot; &amp;lt;&amp;lt; endl &amp;lt;&amp;lt;endl;

    int counter = 1;
    do
    {
        cout &amp;lt;&amp;lt; &quot;Dzialanie petli do...while(i&amp;lt;=j);&quot; &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt; &quot;---------------------------------------------------&quot; &amp;lt;&amp;lt; endl;

        while(tablica[i] &amp;lt; pivot) i++;
        cout&amp;lt;&amp;lt;&quot;while(tablica[i]&amp;lt;pivot) i++;      i = &quot;&amp;lt;&amp;lt; i &amp;lt;&amp;lt;endl;
        while(tablica[j] &amp;gt; pivot) j--;
        cout&amp;lt;&amp;lt;&quot;while(tablica[j]&amp;gt;pivot) j--;      j = &quot;&amp;lt;&amp;lt; j &amp;lt;&amp;lt;endl &amp;lt;&amp;lt; endl;

        cout&amp;lt;&amp;lt;&quot;warunek if(i&amp;lt;=j) wewnatrz petli do...while   &quot;&amp;lt;&amp;lt;endl;
        if(i &amp;lt;= j)
        {
            swap(tablica[i],tablica[j]);
            cout&amp;lt;&amp;lt;&quot;swap(tablica[i],tablica[j]);         = (&quot;&amp;lt;&amp;lt;tablica[i]&amp;lt;&amp;lt;&quot;,&quot;&amp;lt;&amp;lt;tablica[j]&amp;lt;&amp;lt;&quot;)&quot;&amp;lt;&amp;lt;endl;

            i++;
            j--;
            cout&amp;lt;&amp;lt;&quot;i++;                               i = &quot;&amp;lt;&amp;lt; i &amp;lt;&amp;lt;endl;
            cout&amp;lt;&amp;lt;&quot;j--;                               j = &quot;&amp;lt;&amp;lt; j &amp;lt;&amp;lt;endl;

        }

        cout&amp;lt;&amp;lt;'\n'&amp;lt;&amp;lt;&quot;***Po posortowaniu nr.&quot;&amp;lt;&amp;lt;counter &amp;lt;&amp;lt;endl;
        for(int i=0; i&amp;lt;6; i++)
        {
            cout&amp;lt;&amp;lt;tablica[i]&amp;lt;&amp;lt;&quot; &quot;;
        }
        cout &amp;lt;&amp;lt; &quot;\n---------------------------------------------------&quot; &amp;lt;&amp;lt; endl;
        counter++;
        getchar();

    }
    while(i &amp;lt;= j);
&amp;nbsp;  
&amp;nbsp;   cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &quot;[ i = &quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;]&quot; &amp;lt;&amp;lt; &quot;[prawy = &quot; &amp;lt;&amp;lt; prawy &amp;lt;&amp;lt;&quot;]&quot;&amp;lt;&amp;lt; endl;
    if(j&amp;gt;lewy)
    {
        cout &amp;lt;&amp;lt;endl&amp;lt;&amp;lt; &quot;REKURENCJA&quot; &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt;endl&amp;lt;&amp;lt; &quot;lewy = &quot;&amp;lt;&amp;lt; lewy &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt; &quot;j = &quot;         &amp;lt;&amp;lt; j &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt; &quot;if(j&amp;gt;lewy)  quicksort(tablica,lewy, j);&quot; &amp;lt;&amp;lt; endl;
        quicksort(tablica,lewy, j);
    }
    cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &quot;[ i = &quot; &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;]&quot; &amp;lt;&amp;lt; &quot;[prawy = &quot; &amp;lt;&amp;lt; prawy &amp;lt;&amp;lt;&quot;]&quot;&amp;lt;&amp;lt; endl;
    if(i&amp;lt;prawy)
    {
        cout &amp;lt;&amp;lt;endl&amp;lt;&amp;lt; &quot;REKURENCJA&quot; &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt;endl&amp;lt;&amp;lt; &quot;prawy = &quot;&amp;lt;&amp;lt; prawy &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt; &quot;i = &quot;          &amp;lt;&amp;lt; i &amp;lt;&amp;lt; endl&amp;lt;&amp;lt;endl;
        cout &amp;lt;&amp;lt; &quot;if(i&amp;lt;prawy) quicksort(tablica, i, prawy);&quot; &amp;lt;&amp;lt; endl;
        quicksort(tablica, i, prawy);
    }
}

int main()
{
    int tablica[] = {6, 3, 11, 3, 3, 9};

        cout&amp;lt;&amp;lt;&quot;Przed posortowaniem: &quot;&amp;lt;&amp;lt;endl;
        for(int i=0; i&amp;lt;6; i++) {

            cout&amp;lt;&amp;lt;tablica[i]&amp;lt;&amp;lt;&quot; &quot;;
        }

    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;Sortuje teraz algorytmem quicksort. Prosze czekac!&quot;&amp;lt;&amp;lt;endl &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;quicksort (tablica, 0, 5);\nvoid quicksort(int *tablica, int lewy, int prawy)&quot; &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;

    quicksort(tablica, 0, 5);

        cout&amp;lt;&amp;lt;&quot;Po posortowaniu: &quot;&amp;lt;&amp;lt;endl;
        for(int i=0; i&amp;lt;6; i++){

            cout&amp;lt;&amp;lt;tablica[i]&amp;lt;&amp;lt;&quot; &quot;;
        }

    return 0;
}


&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/356040/quicksort-rekurencja</guid>
<pubDate>Wed, 06 Jun 2018 17:40:28 +0000</pubDate>
</item>
<item>
<title>Wywala program podczas rekurencji - QuickSort</title>
<link>https://forum.pasja-informatyki.pl/354185/wywala-program-podczas-rekurencji-quicksort</link>
<description>

&lt;p&gt;Cześć, potrzebuje zaimplementować QuickSorta. Oglądałem film z pewnego kanału odnośnie jak działa i była tam też również implementacja, którą po całkowitym zrozumieniu postanowiłem przekopiować.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void quick_Sort(int *tab, int left, int right)
{
    int border = right-1;
    int pivot = tab[right];
    int i = left;

    if(left&amp;gt;=right)
    {
        return;
    }


    while(i &amp;lt; right)
    {
        if(tab[i] &amp;lt; pivot)
        {
            border++;
            if(border != i)
            {
                swap(tab, border, i);
            }
        }
        i++;
    }

    border++;
    if(border != right)
    {
        swap(tab, border, right);
    }
    quick_Sort(tab,left,border-1);
    quick_Sort(tab,border+1,right);

    for(i=0; i&amp;lt;5; i++)
    {
        printf(&quot;%d  &quot;,tab[i]);
    }
}
&lt;/pre&gt;



&lt;p&gt;Niestety program wywala na końcu funkcji, gdy ma zostać wywołana rekurencja.&lt;/p&gt;



&lt;p&gt;Wie ktoś o co chodzi?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/354185/wywala-program-podczas-rekurencji-quicksort</guid>
<pubDate>Wed, 30 May 2018 18:32:22 +0000</pubDate>
</item>
<item>
<title>C++ quick sort nie rekurencyjnie</title>
<link>https://forum.pasja-informatyki.pl/334435/c-quick-sort-nie-rekurencyjnie</link>
<description>Ma ktoś program quick sort nie rekurencyjnie i mógłby wysłać kod?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/334435/c-quick-sort-nie-rekurencyjnie</guid>
<pubDate>Tue, 13 Mar 2018 20:13:40 +0000</pubDate>
</item>
<item>
<title>quicksort nierekurencyjnie</title>
<link>https://forum.pasja-informatyki.pl/334380/quicksort-nierekurencyjnie</link>
<description>Witam&lt;br /&gt;
&lt;br /&gt;
Mam probłem, jestem początkujący i mam za zadanie zrobić quicksort rekurencyjnie co już zrobiłem i quicksort nie rekurencyjnie. Co sprawia mi duży problem. Niestety nawet nie wiem jak zacząć :/ Jakieś rady jak zacząć czy coś?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/334380/quicksort-nierekurencyjnie</guid>
<pubDate>Tue, 13 Mar 2018 17:28:46 +0000</pubDate>
</item>
<item>
<title>Quick sort (szybkie wyszukiwanie)</title>
<link>https://forum.pasja-informatyki.pl/321006/quick-sort-szybkie-wyszukiwanie</link>
<description>Dzień dobry, dla Szybkiego wyszukiwania potrzebna parzysta ilość liczb? I jak w tedy kiedy jest nie parzysta ilość, dzielić na pół taką tablice?(jeżeli można z jakimś kodem przykładowym lub pseudo-kodem) Dziękuję z góry!</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/321006/quick-sort-szybkie-wyszukiwanie</guid>
<pubDate>Wed, 24 Jan 2018 09:15:50 +0000</pubDate>
</item>
<item>
<title>C++ odcinek 14 - problem ze zrozumieniem</title>
<link>https://forum.pasja-informatyki.pl/314402/c-odcinek-14-problem-ze-zrozumieniem</link>
<description>

&lt;p&gt;Witam&lt;/p&gt;



&lt;p&gt;Bez owijania w bawełnę jak w temacie, kod jest zerżnięty 1:1 z filmu Pana Mirosława&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;windows.h&amp;gt;

using namespace std;

int ile;
clock_t start,stop;
double czas;

void quicksort(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2];
    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while(tablica[i]&amp;lt;v) i++;
        while(tablica[j]&amp;gt;v) j--;
        if(i&amp;lt;=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }
    }
    while(i&amp;lt;=j);
    if(j&amp;gt;lewy) quicksort(tablica,lewy, j);
    if(i&amp;lt;prawy) quicksort(tablica, i, prawy);
}

int main()
{
    cout &amp;lt;&amp;lt; &quot;Porownanie czasow sortowania v.1&quot; &amp;lt;&amp;lt; endl;

    cout&amp;lt;&amp;lt;&quot;Ile losowych liczb w tablicy: &quot;;
    cin&amp;gt;&amp;gt;ile;

    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];

    //inicjowanie generatora
    srand(time(NULL));

    //wczytywanie losowych liczb do tablicy
    for(int i=0; i&amp;lt;ile; i++)
    {
        tablica[i] = rand()%100000+1;
    }

    //przepisanie tablicy do tablicy2
    for(int i=0; i&amp;lt;ile; i++)
    {
       tablica[i]=tablica[i];
    }


    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;Sortuje teraz algorytmem quicksort. Prosze czekac!&quot;&amp;lt;&amp;lt;endl;
    start = clock();
    quicksort(tablica, 0, ile-1);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;Czas sortowania quicksort: &quot;&amp;lt;&amp;lt;czas&amp;lt;&amp;lt;&quot; s&quot;&amp;lt;&amp;lt;endl;


       cout&amp;lt;&amp;lt;&quot;Po posortowaniu: &quot;&amp;lt;&amp;lt;endl;
        for(int i=0; i&amp;lt;ile; i++)
        {
            cout&amp;lt;&amp;lt;tablica[i]&amp;lt;&amp;lt;&quot; &quot;;
        }


    delete [] tablica;

    return 0;
}

    cout &amp;lt;&amp;lt; &quot;Porownanie czasow sortowania v.1&quot; &amp;lt;&amp;lt; endl;

    cout&amp;lt;&amp;lt;&quot;Ile losowych liczb w tablicy: &quot;;
    cin&amp;gt;&amp;gt;ile;

    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];

    //inicjowanie generatora
    srand(time(NULL));

    //wczytywanie losowych liczb do tablicy
    for(int i=0; i&amp;lt;ile; i++)
    {
        tablica[i] = rand()%100000+1;
    }

    //przepisanie tablicy do tablicy2
    for(int i=0; i&amp;lt;ile; i++)
    {
       tablica[i]=tablica[i];
    }


    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;Sortuje teraz algorytmem quicksort. Prosze czekac!&quot;&amp;lt;&amp;lt;endl;
    start = clock();
    quicksort(tablica, 0, ile-1);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;Czas sortowania quicksort: &quot;&amp;lt;&amp;lt;czas&amp;lt;&amp;lt;&quot; s&quot;&amp;lt;&amp;lt;endl;


       cout&amp;lt;&amp;lt;&quot;Po posortowaniu: &quot;&amp;lt;&amp;lt;endl;
        for(int i=0; i&amp;lt;ile; i++)
        {
            cout&amp;lt;&amp;lt;tablica[i]&amp;lt;&amp;lt;&quot; &quot;;
        }


    delete [] tablica;

    return 0;
}
&lt;/pre&gt;



&lt;p&gt;Mam tu problem ze zrozumieniem&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
        if(i&amp;lt;=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }&lt;/pre&gt;



&lt;p&gt;Dlaczego mam zamieniać się tymi zmiennymi, jak bym dał po prostu i-- i j++ to na pierwsze oko nie trzeba by było tego zamieniać. Jednak jak coś tam szperam w tym miejscu to zawsze program dostaje &quot;laga&quot;. Wyjaśni ktoś czemu trzeba zamieniać a nie działa od razu?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/314402/c-odcinek-14-problem-ze-zrozumieniem</guid>
<pubDate>Fri, 29 Dec 2017 13:10:26 +0000</pubDate>
</item>
<item>
<title>Quick sort pomoc w wytłumaczeniu 2 linijek kodu.</title>
<link>https://forum.pasja-informatyki.pl/306872/quick-sort-pomoc-w-wytlumaczeniu-2-linijek-kodu</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
void sortowanie(int *liczby, int lewy, int prawy)
{
    int v=liczby[(lewy+prawy)/2];

    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while(liczby[i]&amp;lt;v) i++;
        while(liczby[j]&amp;gt;v) j--;

        if(i&amp;lt;=j)
        {
            x=liczby[i];
            liczby[i]=liczby[j];
            liczby[j]=x;
            i++;
            j--;
        }

    }
    while (i&amp;lt;=j);

   &lt;span style=&quot;color:#ff0000&quot;&gt; if(j&amp;gt;lewy) sortowanie(liczby,lewy, j);
    if(i&amp;lt;prawy) sortowanie(liczby, i, prawy);&lt;/span&gt;

}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Witam mógłby mi ktoś wyjaśnić te 2 ostatnie czerwone linijki kodu, czemu nie może być np i zamiast lewy lub j zamiast prawy, bo nie działa takto funkcja. Dziękuje z góry za odpowiedź.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/306872/quick-sort-pomoc-w-wytlumaczeniu-2-linijek-kodu</guid>
<pubDate>Mon, 27 Nov 2017 18:38:51 +0000</pubDate>
</item>
<item>
<title>Problem ze zrozumieniem kodu quicksort</title>
<link>https://forum.pasja-informatyki.pl/306147/problem-ze-zrozumieniem-kodu-quicksort</link>
<description>

&lt;p&gt;void quicksort(int *tablica&lt;span style=&quot;color:#ff0000&quot;&gt;, &lt;span style=&quot;text-decoration: underline;&quot;&gt;int lewy, int prawy&lt;/span&gt;&lt;/span&gt;)
&lt;br&gt;
{
&lt;br&gt;
&lt;span style=&quot;background-color:#ff0000&quot;&gt;int v=tablica[(lewy+prawy)/2];&lt;/span&gt;
&lt;br&gt;
int i,j,x;
&lt;br&gt;
i=lewy;
&lt;br&gt;
j=prawy;
&lt;br&gt;
do{
&lt;br&gt;
&lt;span style=&quot;background-color:#ff0000&quot;&gt;while (tablica[i]&amp;lt;v) i++;&lt;/span&gt;
&lt;br&gt;
&lt;span style=&quot;background-color:#ff0000&quot;&gt;while (tablica[j]&amp;gt;v) j--;&lt;/span&gt;
&lt;br&gt;
if (i&amp;lt;=j){
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x=tablica[i];
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tablica[i]=tablica[j];
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tablica[j]=x;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++; j--;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;br&gt;
}while(i&amp;lt;=j);&lt;/p&gt;



&lt;p&gt;
&lt;br&gt;
if (j&amp;gt;lewy) quicksort(tablica,lewy, j);
&lt;br&gt;
if (i&amp;lt;prawy) quicksort(tablica, i, prawy);
&lt;br&gt;
}
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Witam, jest to kod z odcinka 14 z kursu c++ przedstawiający sortowanie quicksort zaznaczyłem na czerwono linijki kodu ktorych nie rozumiem, mógłby mi je ktoś wyjaśnić. Dziekuje z góry za pomoc.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/306147/problem-ze-zrozumieniem-kodu-quicksort</guid>
<pubDate>Sat, 25 Nov 2017 15:38:11 +0000</pubDate>
</item>
<item>
<title>Quick sort problem</title>
<link>https://forum.pasja-informatyki.pl/259099/quick-sort-problem</link>
<description>

&lt;p&gt;Witam. Piszę własnie Quick sorta, przy zastosowaniu algorytmu Horea do wyznaczenia pivota. Niestety program po uruchomieniu zostaje przerwany, z niewiadomego mi powodu. Bardzo proszę Was o pomoc. Sam nie potrafię już znaleźć błędu.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;vector&amp;gt;

void Quicksort(std::vector&amp;lt;int&amp;gt; &amp;amp; iTabWithDatas, int iFirst, int iLast);
int PartitionHorae(std::vector&amp;lt;int&amp;gt; &amp;amp; iTabWithDatas, int iFirst, int iLast);

int main()
{
	std::vector&amp;lt;int&amp;gt;ae{ 5,3,2,6,7,13,7,4};

	Quicksort(ae, 0, ae.size()-1 );

	for (int i = 0; i &amp;lt; ae.size() ; ++i)
	{
		std::cout &amp;lt;&amp;lt; ae[i] &amp;lt;&amp;lt; &quot;,&quot; ;
	}

	return 0;
}

int PartitionHorae(std::vector&amp;lt;int&amp;gt; &amp;amp; iTabWithDatas, int iFirst, int iLast)
{
	int i = iFirst;
	int iPivot = iTabWithDatas[iFirst];
	int j = iLast;

	while (i &amp;lt;= j)
	{
		while (iTabWithDatas[j] &amp;lt; iPivot)
		{
			--j;
		}

		while (iTabWithDatas[i] &amp;gt; iPivot)
		{
			++i;
		}

		if (i &amp;lt;= j)
		{
			std::swap(iTabWithDatas[i], iTabWithDatas[j]);
			++i;
			--j;
		}
	}
	return j;

}

void Quicksort(std::vector&amp;lt;int&amp;gt; &amp;amp; iTabWithDatas, int iFirst, int iLast)
{
	if (iFirst &amp;lt; iLast)
	{
		int q = PartitionHorae(iTabWithDatas, iFirst, iLast);

		Quicksort(iTabWithDatas, iFirst, q);
		Quicksort(iTabWithDatas, q + 1, iLast);
	}

}
&lt;/pre&gt;



&lt;p&gt;Z góry dziekuje za pomoc.&lt;/p&gt;



&lt;p&gt;Pozdrawiam&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/259099/quick-sort-problem</guid>
<pubDate>Sat, 03 Jun 2017 11:12:53 +0000</pubDate>
</item>
<item>
<title>Quicksort. Jak działa ten algorytm?</title>
<link>https://forum.pasja-informatyki.pl/217933/quicksort-jak-dziala-ten-algorytm</link>
<description>

&lt;p&gt;Może mi ktoś wytłumaczyć&amp;nbsp;jak ten algorytm działa? Krok po kroku&amp;nbsp;&lt;img alt=&quot;smiley&quot; src=&quot;http://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/regular_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;smiley&quot;&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:jscript;&quot;&gt;
function quicksort(arr) {
&amp;nbsp;if (arr.length &amp;lt;= 1) {
&amp;nbsp;return arr;
}

var arrLength = arr.length;
var pivotPosition = Math.floor(arrLength / 2);
var pivotValue = arr[pivotPosition];
var less = [],
&amp;nbsp; &amp;nbsp; more = [],
&amp;nbsp; &amp;nbsp; same = [];
for (var i = 0; i &amp;lt; arrLength; i++) {
&amp;nbsp; &amp;nbsp; if (arr[i] === pivotValue) {
&amp;nbsp; &amp;nbsp; same.push(arr[i]);
}
&amp;nbsp; &amp;nbsp; else if (arr[i] &amp;lt; pivotValue) {
&amp;nbsp; &amp;nbsp; less.push(arr[i]);
&amp;nbsp;}
&amp;nbsp; &amp;nbsp; else {
&amp;nbsp; &amp;nbsp; &amp;nbsp;more.push(arr[i]);
&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&amp;nbsp;}
&amp;nbsp; &amp;nbsp;return quicksort(less).concat(same, quicksort(more));
&amp;nbsp;}
&amp;nbsp;quicksort([4,5,2,3,6,7,9,1,8]);
&lt;/pre&gt;</description>
<category>JavaScript</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/217933/quicksort-jak-dziala-ten-algorytm</guid>
<pubDate>Thu, 19 Jan 2017 19:08:30 +0000</pubDate>
</item>
<item>
<title>algorytm quicksort a jego implementacja w C++</title>
<link>https://forum.pasja-informatyki.pl/214635/algorytm-quicksort-a-jego-implementacja-w-c</link>
<description>

&lt;p&gt;Witajcie! Jestem na początku drogi jeśli chodzi o programowanie, jest to też moje pierwsze pytanie na forum, dlatego proszę o wyrozumiałość jeśli, pomimo starań, nie uda mi się zrobić wszystkiego zgodnie z regulaminem &lt;img alt=&quot;wink&quot; src=&quot;http://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/wink_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;wink&quot;&gt;&lt;/p&gt;



&lt;p&gt;Od jakiegoś czasu uczę się programowania (C++) z kursu p. Mirosława Zelenta (uwielbiam i polecam!) jednak jedna rzecz z odcinka 14 (o sortowaniu) nie daje mi spokoju. Dokładnie chodzi o założenia algorytmu quicksort a jego implementację w C++. Poniżej wklejam kod, jaki p. Mirosław podał w swoim filmiku:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void quicksort(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2];
    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while (tablica[i]&amp;lt;v) i++;
        while (tablica[j]&amp;gt;v) j--;
        if (i&amp;lt;=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++; j--;
        }
    }
    while (i&amp;lt;=j);
    if (j&amp;gt;lewy) quicksort(tablica,lewy, j);
    if (i&amp;lt;prawy) quicksort(tablica, i, prawy);
}
&lt;/pre&gt;



&lt;p&gt;I teraz tak: jeśli dobrze wszystko rozumiem, założeniem quicksortu (sortującego rosnąco) jest takie posortowanie tablicy, aby &lt;strong&gt;wszystkie &lt;/strong&gt;elementy większe od osi znalazły się na prawo od osi, a mniejsze na lewo, po czym następują kolejne sortowania poprzez dalsze dzielenie powstałych &quot;podtablic&quot;. Natomiast w podanej implementacji, jeśli dobrze widzę, powstaną raczej dwa zbiory liczb - zbiór liczb większych i mniejszych od osi, w jednym z nich znajdzie się oś, jednak niekoniecznie będzie ona &quot;oddzielała&quot; te dwa zbiory, np. dla tablicy:&amp;nbsp;29, 36, 2, 12, 53, 4, 70 po pierwszym sortowaniu będziemy mieć sytuację: 4 12 &lt;strong&gt;2 &lt;/strong&gt;36 53 29 70, gdzie oś = 12, a więc pogrubiona przeze mnie liczba 2 leży po jej prawej stronie... Czy ktoś wie, dlaczego ta implementacja tak wygląda? Może ja coś zrozumiałam na opak? Z góry dzięki wielkie za wyjaśnienia, nie ukrywam, że temat trochę spędza mi sen z powiek&amp;nbsp;&lt;img alt=&quot;cheeky&quot; src=&quot;http://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/tongue_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;cheeky&quot;&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/214635/algorytm-quicksort-a-jego-implementacja-w-c</guid>
<pubDate>Tue, 10 Jan 2017 11:15:04 +0000</pubDate>
</item>
<item>
<title>Problem z funkcją sortowania Quicksort</title>
<link>https://forum.pasja-informatyki.pl/171537/problem-z-funkcja-sortowania-quicksort</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

void quicksort(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2];
    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while (tablica[i]&amp;lt;v) i++;
        while (tablica[j]&amp;gt;v) j--;
        if (i&amp;lt;=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }
    }
    while (i&amp;lt;=j);
    if (j&amp;gt;lewy) quicksort(tablica,lewy, j);
    if (i&amp;lt;prawy) quicksort(tablica, i, prawy);
}

int main()
{
int ile;
cout &amp;lt;&amp;lt; &quot;Ile liczb chcesz posotowac&quot; &amp;lt;&amp;lt; endl;
    cin &amp;gt;&amp;gt; ile;

    //tablica
    int *tablica;
    tablica=new int [ile];
    //tablica

cout &amp;lt;&amp;lt; &quot;Napisz te liczby\n&quot; &amp;lt;&amp;lt; endl;

    //wczytanie z klawiatury
    for(int i=1; i&amp;lt;ile; i++)
    {
        cin &amp;gt;&amp;gt; tablica[i];
    }
    //wczytanie z klawiatury

    //sortowanie
    quicksort(tablica,0,ile-1);
    //sortowanie

    //wypisanie posortowanej zawartosci
    for(int i=1; i&amp;lt;=ile; i++)
    {
cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot;. &quot; &amp;lt;&amp;lt; tablica[i] &amp;lt;&amp;lt; endl;
    }
    //wypisanie posortowanej zawartosci
}&lt;/pre&gt;



&lt;p&gt;Witam, to jest część mojego pomysłu na program sortujący z użyciem algorytmu quicksort. Problem w tym, że zamiast posortowanych liczb otrzymuje dziwne liczby których pochodzenia nie rozumiem. Oto przykładowe zrzuty ekranu:&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=8716765793952451393&quot; style=&quot;height:305px; width:521px&quot;&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=7150590056661566707&quot; style=&quot;height:226px; width:522px&quot;&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Za wszystkie udzielone odpowiedzi z góry dziękuje.Pozdrawiam&lt;img alt=&quot;wink&quot; src=&quot;http://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/wink_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;wink&quot;&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/171537/problem-z-funkcja-sortowania-quicksort</guid>
<pubDate>Mon, 22 Aug 2016 11:49:05 +0000</pubDate>
</item>
<item>
<title>Problem z programem porównującym 2 algorytmy sortujące tak zwany quick sort i algortym sortujący poprzez zliczanie</title>
<link>https://forum.pasja-informatyki.pl/155994/problem-programem-porownujacym-algorytmy-sortujace-algortym-sortujacy-zliczanie</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
Mam problem nie wiem czemu te programy dla wartości 10 spokojnie sortują a jeżeli dam im na przykład 32 to nagle zaczynają wariować oczywiście mowie tutaj o rozmiarze tablicy nie wiem czemu ale jeżeli zmienię z tab[32] na tab[33] a wyśle i tak 32 liczby do funkcji to wtedy sortuje poprawnie oczywiście nie wiem tego dla wszystkich wartości jakie istnieją bo jest ich bardzo dużo.Z tego co liczyłem na kartce algorytm się sprawdza, lecz problem jest taki, iż nie wiem czy to co napisałem jest ok proszę o pomoc jeżeli ktoś jest w stanie mi tutaj ogarnąć czemu zmiana tak tablicy powoduję poprawne wykonywanie programu dla większych tablic.
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;windows.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;conio.h&amp;gt;
#include &amp;lt;iomanip&amp;gt;

using namespace std;

int podzielic(int tab[],int lewa,int prawa);
void QSort(int tab[],int lewa,int prawa);
void SortowanieZliczanie(int tab[],int wynik[],int dlugosc_tablicy);
void losownie(int tab1[],int tab2[],int n);

clock_t start,stop;

int main()
{
    int tab1Q[32],tab2Q[64],tab3Q[128],tab4Q[256],tab5Q[512],tab6Q[1024];
    int tab1Z[32],tab2Z[64],tab3Z[128],tab4Z[256],tab5Z[512],tab6Z[1024];
    int tab1Zw[32],tab2Zw[64],tab3Zw[128],tab4Zw[256],tab5Zw[512],tab6Zw[1024];
    double czas,czasQ=0,czasZ=0,Srednia_Q,Srednia_Z;
    srand(time(NULL));

    for(int j=0;j&amp;lt;4;j++)
    {
        losownie(tab1Q,tab1Z,32);
        cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;tablica dla QuickSort'a:&quot;&amp;lt;&amp;lt;endl;
        for(int i=0;i&amp;lt;32;i++)
        {
            cout&amp;lt;&amp;lt;tab1Q[i]&amp;lt;&amp;lt;&quot;, &quot;;
        }
        cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;tablica dla Sortowania Przez Zliczanie:&quot;&amp;lt;&amp;lt;endl;
        for(int i=0;i&amp;lt;32;i++)
        {
            cout&amp;lt;&amp;lt;tab1Z[i]&amp;lt;&amp;lt;&quot;, &quot;;
        }
        cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
        start = clock();
        QSort(tab1Q,0,32);
        stop = clock();
        czas = (double)(stop-start)/CLOCKS_PER_SEC;
        cout&amp;lt;&amp;lt;&quot;wykonano quicksort w &quot;&amp;lt;&amp;lt;setprecision(100)&amp;lt;&amp;lt;czas&amp;lt;&amp;lt;&quot; s&quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
        czasQ+=czas;
        for(int i=0;i&amp;lt;32;i++)
        {
            cout&amp;lt;&amp;lt;tab1Q[i]&amp;lt;&amp;lt;&quot;, &quot;;
        }
        cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
        start = clock();
        SortowanieZliczanie(tab1Z,tab1Zw,32);
        stop = clock();
        czas = (double)(stop-start)/CLOCKS_PER_SEC;
        cout&amp;lt;&amp;lt;&quot;wykonano zliczanie w &quot;&amp;lt;&amp;lt;setprecision(100)&amp;lt;&amp;lt;czas&amp;lt;&amp;lt;&quot; s&quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
        czasZ+=czas;
        for(int i=0;i&amp;lt;32;i++)
        {
            cout&amp;lt;&amp;lt;tab1Zw[i]&amp;lt;&amp;lt;&quot;, &quot;;
        }
    }
    Srednia_Q=czasQ/4;
    Srednia_Z=czasZ/4;
    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;Sredni czas liczenia dla tablicy 32 elementy QuickSort &quot;&amp;lt;&amp;lt;Srednia_Q&amp;lt;&amp;lt;&quot; s&quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
    cout&amp;lt;&amp;lt;&quot;Sredni czas liczenia dla tablicy 32 elementy Zliczanie &quot;&amp;lt;&amp;lt;Srednia_Z&amp;lt;&amp;lt;&quot; s&quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
    system(&quot;pause&quot;);
    system(&quot;cls&quot;);
    return 0;
}

void losownie(int tab1[],int tab2[],int n)
{
    for(int i=0;i&amp;lt;32;i++)
    {
        tab1[i]=rand()%100+1;
    }
    for(int i=0;i&amp;lt;32;i++)
    {
        tab2[i]=tab1[i];
    }
}

int podzielic(int tab[],int lewa,int prawa)
{
    int x= tab[lewa];
    int i = lewa, j= prawa, w;// i oraz j to sa indeksy tablicy
    while(true)//petla nieskonczona - wychodzimy z nie tylko przez return j
    {
        while(tab[j]&amp;gt;x)
            j--;
        while(tab[i]&amp;lt;x)
            i++;
        if(i&amp;lt;j) // zamieniamy miejscami w przypadku gdy i mniejszy od j
        {
            w = tab[i];
            tab[i]= tab[j];
            tab[j]=w;
            i++;
            j--;
        }
        else
            return j;
    }
}
void QSort(int tab[],int lewa,int prawa)//sortowanie szybkie
{
int q;
    if(lewa &amp;lt; prawa)
    {
        q = podzielic(tab,lewa,prawa);
        QSort(tab,lewa,q);
        QSort(tab,q+1,prawa);
    }
}
void SortowanieZliczanie(int tab[],int wynik[],int dlugosc_tablicy)
{
    int wartosc_MAX_liczb=100;

    wynik[dlugosc_tablicy];

    int pomoc[wartosc_MAX_liczb];

    for(int i=0;i&amp;lt;wartosc_MAX_liczb;i++)
    {
        pomoc[i]=0;
    }

    for(int j=0;j&amp;lt;dlugosc_tablicy;j++)
    {
        pomoc[tab[j]]=pomoc[tab[j]]+1;
    }
    for(int i=1;i&amp;lt;wartosc_MAX_liczb;i++)
    {
        pomoc[i]=pomoc[i]+pomoc[i-1];
    }
    for(int j=dlugosc_tablicy-1;j&amp;gt;=0;j--)
    {
        wynik[pomoc[tab[j]]-1]=tab[j];
        pomoc[tab[j]]=pomoc[tab[j]]-1;
    }

}&lt;/pre&gt;



&lt;p&gt;Pozdrawiam famousghost&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/155994/problem-programem-porownujacym-algorytmy-sortujace-algortym-sortujacy-zliczanie</guid>
<pubDate>Tue, 05 Jul 2016 09:31:14 +0000</pubDate>
</item>
<item>
<title>Wyjaśnienie kodu quicksort (C++)</title>
<link>https://forum.pasja-informatyki.pl/150609/wyjasnienie-kodu-quicksort-c</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
​
    int v=tablica[(lewy+prawy)/2];
    int p=lewy;
    int q=prawy;
    int x;
    do
    {
        while (tablica[p]&amp;lt;v) p++; //Wyszukujemy od Lewej strony tablicy element wiekszy od piwota
        while (tablica[q]&amp;gt;v) q--; // Wyszukujemy od prawej strony tablicy element mniejszy od piwota
        if (p&amp;lt;=q)
        {
            x= tablica[p];      //Zamieniamy elementy tak aby wiekszy od piwota podszedl na prawa strone
            tablica[p]=tablica[q];
            tablica[q]=x;    // a mniejszy od piwota poszedl na lewa
            p++;
            q--;
        }
    }   while (p&amp;lt;=q);


    if (q&amp;gt;lewy) quicksort(tablica,lewy,q);
    if (p&amp;lt;prawy) quicksort(tablica,p,prawy);&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Witam, czy mógłby mi ktoś wytłumaczyć program Quicksort.&lt;/p&gt;



&lt;p&gt;Całą logikę znam, ale ten program jest dla mnie nie zrozumiały.&amp;nbsp;&lt;img alt=&quot;indecision&quot; src=&quot;http://forum.pasja-informatyki.pl/qa-plugin/ckeditor4/plugins/smiley/images/whatchutalkingabout_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;indecision&quot;&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/150609/wyjasnienie-kodu-quicksort-c</guid>
<pubDate>Wed, 15 Jun 2016 19:05:41 +0000</pubDate>
</item>
<item>
<title>problem z quick sort</title>
<link>https://forum.pasja-informatyki.pl/126695/problem-z-quick-sort</link>
<description>

&lt;p&gt;Witam, w celu pocwiczenia programowania postanowilem samemu napisac w/w algorytm, tak dla lepszego zrozumienia tematu. Program dziala jednak nie dla wszystkich konfiguracji liczb, dla liczb: 9,5,7,0,5,7,7,9 program sie juz sypie. Klika dni probuje juz wymyslic co moze byc nie tak i niestety bez skutku. Z gory dziekuje za pomoc. Ponizej kod programu:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;time.h&amp;gt;

using namespace std;

void sortowanie(int liczby[], int p, int q)  //posylamy funkcji: tablice, indeks pierwszej liczby, indeks ostatniej liczby
{
    int os,m,w=q,y=p;
    os=liczby[(p+q)/2];
    while(p&amp;lt;q)
    {
        while(liczby[p]&amp;lt;os) p++;
        while(liczby[q]&amp;gt;os) q--;
        if(p&amp;lt;q)
        {
            //zamiana miejscami
            m=liczby[p];
            liczby[p]=liczby[q];
            liczby[q]=m;
            p++;
            q--;
        }
    }
    if(w&amp;gt;y)
    {
        sortowanie (liczby,p,(y+w)/2);
        sortowanie (liczby,(y+w)/2 +1,w);
    }

}

 

int main()
{
    //--WPROWADZENIE I SPRAWDZENIE DANYCH--
    int n;
    cout &amp;lt;&amp;lt; &quot;Wprowadz ile liczb chcesz posortowac: &quot;;
    cin&amp;gt;&amp;gt;n;
    //n - ilosc liczb
    while (n&amp;lt;=0)
    {
        cout&amp;lt;&amp;lt;&quot;Liczba musi byc dodatnia!&quot;&amp;lt;&amp;lt;endl;
        cout &amp;lt;&amp;lt; &quot;Wprowadz ile liczb chcesz posortowac: &quot;;
        cin&amp;gt;&amp;gt;n;
    }
    int liczby[n];
    //tablica w ktorej beda przechowywane wprowadzone liczby
    //ponizej wprowadzanie liczb
    cout&amp;lt;&amp;lt;&quot;Wprowadz pierwsza liczbe: &quot;;
    cin&amp;gt;&amp;gt;liczby[0];
    for(int i=1; i&amp;lt;n; i++)
    {
        cout&amp;lt;&amp;lt;&quot;Wprowadz kolejna liczbe: &quot;;
        cin&amp;gt;&amp;gt;liczby[i];
    }

 

    //--SORTOWANIE (rosnaco) I MIERZENIE CZASU SORTOWANIA--
    clock_t start,stop;
    int czas;
    czas=(double)(stop-start)/CLOCKS_PER_SEC;

    sortowanie(liczby,0,n-1);

    //--WYPROWADZENIE DANYCH--
    for(int j=0; j&amp;lt;n; j++)
    {
        cout&amp;lt;&amp;lt;liczby[j]&amp;lt;&amp;lt;&quot; &quot;;
    }
    cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&quot;Czas sortowania: &quot;&amp;lt;&amp;lt;czas;

    return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/126695/problem-z-quick-sort</guid>
<pubDate>Wed, 06 Apr 2016 19:27:44 +0000</pubDate>
</item>
<item>
<title>Program wywłaszczony - problem z sortowaniem</title>
<link>https://forum.pasja-informatyki.pl/78877/program-wywlaszczony-problem-z-sortowaniem</link>
<description>

&lt;p&gt;Witam! Od pewnego czasu zmagam się z zadaniem&amp;nbsp;&lt;a href=&quot;http://main.edu.pl/pl/archive/oi/4/kaj&quot; rel=&quot;nofollow&quot;&gt;http://main.edu.pl/pl/archive/oi/4/kaj&lt;/a&gt;&amp;nbsp;
&lt;br&gt;
Do jego wykonania użyłem na początku sortowania bąbelkowego lecz dostałem komunikat &quot;Program wywłaszczony&quot; i 44 punkty. Postanowiłem przerzucić się na quicksort lecz wtedy było jeszcze gorzej &quot;Program wywłaszsczony&quot; i 0 punktów. W czym jest problem? Nie mam za bardzo pomysłu.&amp;nbsp;
&lt;br&gt;
Ktoś już zasugerował mi abym użył funkcji sort z biblioteki algorithm, lecz zastosowanie jej wymaga wiedzy, której nie posiadam, więc póki co chciałbym to wyminąć jeśli to możliwe.&amp;nbsp;
&lt;br&gt;
Dołączam mój kod źródłowy. Z góry dziękuję za pomoc.&amp;nbsp;:)&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;#include &amp;lt;iostream&amp;gt;&lt;/p&gt;



&lt;p&gt;using namespace std;
&lt;br&gt;
int wagamax, ilosc, licznik=0;&lt;/p&gt;



&lt;p&gt;void quicksort(int *tablica, int lewy, int prawy)
&lt;br&gt;
{
&lt;br&gt;
&amp;nbsp; &amp;nbsp; int v=tablica[(lewy+prawy)/2];
&lt;br&gt;
&amp;nbsp; &amp;nbsp; int i,j,x;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; i=lewy;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; j=prawy;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; do
&lt;br&gt;
&amp;nbsp; &amp;nbsp; {
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (tablica[i]&amp;lt;v) i++;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (tablica[j]&amp;gt;v) j--;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (i&amp;lt;=j)
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x=tablica[i];
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tablica[i]=tablica[j];
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tablica[j]=x;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i++;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; j--;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;
&amp;nbsp; &amp;nbsp; }
&lt;br&gt;
&amp;nbsp; &amp;nbsp; while (i&amp;lt;=j);
&lt;br&gt;
&amp;nbsp; &amp;nbsp; if (j&amp;gt;lewy) quicksort(tablica,lewy, j);
&lt;br&gt;
&amp;nbsp; &amp;nbsp; if (i&amp;lt;prawy) quicksort(tablica, i, prawy);
&lt;br&gt;
}&lt;/p&gt;



&lt;p&gt;int main()
&lt;br&gt;
{
&lt;br&gt;
&amp;nbsp; &amp;nbsp; cin&amp;gt;&amp;gt;wagamax&amp;gt;&amp;gt;ilosc;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; int *waga;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; waga= new int [ilosc];
&lt;br&gt;
&amp;nbsp; &amp;nbsp; for(int i=0; i&amp;lt;=ilosc-1; i++)
&lt;br&gt;
&amp;nbsp; &amp;nbsp; {
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cin&amp;gt;&amp;gt;waga[i];
&lt;br&gt;
&amp;nbsp; &amp;nbsp; }
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;quicksort(waga, 0, ilosc-1);
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; for(int i=0; i&amp;lt;=ilosc-1; i++)
&lt;br&gt;
&amp;nbsp; &amp;nbsp; {
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cout&amp;lt;&amp;lt;waga[i]&amp;lt;&amp;lt;endl;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; }
&lt;br&gt;
&amp;nbsp; &amp;nbsp; int j=0;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; for(int i=ilosc-1; i&amp;gt;=0; i--)
&lt;br&gt;
&amp;nbsp; &amp;nbsp; {
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(waga[j]!=0 &amp;amp;&amp;amp; waga[i]!=0)licznik++;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(waga[i]+waga[j]&amp;lt;=wagamax)
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; waga[j]=0;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; j++;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; waga[i]=0;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; }
&lt;br&gt;
&amp;nbsp; &amp;nbsp; delete [] waga;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; cout&amp;lt;&amp;lt;licznik;
&lt;br&gt;
&amp;nbsp; &amp;nbsp; return 0;
&lt;br&gt;
}&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/78877/program-wywlaszczony-problem-z-sortowaniem</guid>
<pubDate>Thu, 12 Nov 2015 20:05:57 +0000</pubDate>
</item>
<item>
<title>Sortowanie quicksort - kilka pytań</title>
<link>https://forum.pasja-informatyki.pl/44078/sortowanie-quicksort-kilka-pytan</link>
<description>

&lt;p&gt;Witam serdecznie. Jestem nowym użytkownikiem forum MZ, dlatego, jeśli to możliwe, proszę o wyrozumiałość. ;) Witajcie.&lt;/p&gt;



&lt;p&gt;Od kilku godzin analizuję algorytm quicksort. Większość już rozumiem (tak, wiem, szybki nie jestem...), ale mam kilka wątpliwości.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void quicksort(int *tablica, int lewy, int prawy) { 
	int v=tablica[(lewy+prawy)/2]; 
	int i,j,x; 
	i=lewy; 
	j=prawy; 
	do{ 
		while (tablica[i]&amp;lt;v) i++; 
		while (tablica[j]&amp;gt;v) j--; 
		if (i&amp;lt;=j){ 
			x=tablica[i]; 
			tablica[i]=tablica[j]; 
			tablica[j]=x; 
			i++; 
			j--; 
		} 
	} while (i&amp;lt;=j); 
	if (j&amp;gt;lewy) quicksort(tablica,lewy, j); 
	if (i&amp;lt;prawy) quicksort(tablica, i, prawy); 
}&lt;/pre&gt;



&lt;p&gt;Kod z prezentacji pana Zelenta.&lt;/p&gt;



&lt;p&gt;Moje pytania:
&lt;br&gt;
- dlaczego w linii 9. i 16. używamy warunku mniejszy bądź równy zamiast mniejszy?
&lt;br&gt;
- dlaczego używamy pętli do..while, a nie while; czemu pętla powinna wykonać się raz przed sprawdzeniem warunku?
&lt;br&gt;
- dlaczego w 17. i 18. linijce kodu są warunki; co by było bez nich?&lt;/p&gt;



&lt;p&gt;Pozdrawiam, z góry dziękuję za odpowiedź.&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/44078/sortowanie-quicksort-kilka-pytan</guid>
<pubDate>Sun, 26 Jul 2015 19:09:16 +0000</pubDate>
</item>
<item>
<title>Dziwne errory (quicksort)</title>
<link>https://forum.pasja-informatyki.pl/25873/dziwne-errory-quicksort</link>
<description>

&lt;p&gt;Chciałem zrobić funkcje sortującą elementy vectora. Dodam, że to jest vector obiektów. Niestety wyrzuca&amp;nbsp;mi dziwne błędy. (tak, wiem, że ona sortuje cały wektor i nie mam innej możliwości, tak ma być).&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
template &amp;lt;class U&amp;gt;
void quicksort(vector&amp;lt;U&amp;gt; &amp;amp;tab,int left, int right)
{
    int os=tab[tab.size()/2].def;
    int p=0,q=tab.size()-1;
    U tmp; //to bedzie dzialac? 
    do
    {
        while(tab[p].def&amp;lt;os) p++;
        while(tab[q].def&amp;gt;os) q--;
        if(tab[p].def&amp;lt;=tab[q].def)
        {
            tmp=tab[p];
            tab[p]=tab[q];
            tab[q]=tmp;
            p++;
            q--;
        }
    }
    while(p&amp;lt;=q);
    if(q&amp;gt;0) quicksort(tab, left, q);
    if(p&amp;lt;tab.size()-1) quicksort(tab, p, right);
}&lt;/pre&gt;



&lt;p&gt;Błędy:&lt;/p&gt;



&lt;p&gt;variable or field `quicksort' declared void
&lt;br&gt;
template declaration of `int quicksort' ( przeciez jest void! )
&lt;br&gt;
`vector' was not declared in this scope (jest dodana biblioteka - #include &amp;lt;vector&amp;gt; )
&lt;br&gt;
expected primary-expression before '&amp;gt;' token
&lt;br&gt;
`tab' was not declared in this scope
&lt;br&gt;
expected primary-expression before &quot;int&quot;
&lt;br&gt;
expected primary-expression before &quot;int&quot; (jaki int?! o_O )&lt;/p&gt;



&lt;p&gt;//wszystkie powyższe odnoszą się do pierwszej linii, poniższy do drugiej
&lt;br&gt;
expected `;' before '{' token&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/25873/dziwne-errory-quicksort</guid>
<pubDate>Mon, 01 Jun 2015 22:07:32 +0000</pubDate>
</item>
<item>
<title>Niedokładne sortowanie quicksort</title>
<link>https://forum.pasja-informatyki.pl/24627/niedokladne-sortowanie-quicksort</link>
<description>

&lt;p&gt;Bardzo proszę o pomoc z poniższym kodem. Niestety sortowanie przebiega niedokładnie, a więc to żadne sortowanie :) ale niestety nie mogę zlokalizować gdzie robię błąd.&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void quicksort(int tab[],int poczatek, int koniec){
int punkt_podzialu = (poczatek+koniec)/2;
if(poczatek&amp;lt;koniec){
podzial(tab,poczatek,koniec,punkt_podzialu);
quicksort(tab,poczatek,punkt_podzialu-1);
quicksort(tab,punkt_podzialu+1,koniec);
}
return;
}

void podzial (int tab[], int poczatek,int koniec, int punkt_podzialu)
{
    int i = poczatek;
    int j = koniec;
    int v = tab[poczatek];
    int temp;

    do {
        while (tab[i] &amp;lt;= v)
            i++;
        while (v &amp;lt;= tab[j])
            j--;
        if ( i &amp;lt;= j )
        {
            temp = tab[i];
            tab[i] = tab[j];
            tab[j] = temp;
            i++;
            j--;
        }
    } while (i &amp;lt;= j);

    return;
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/24627/niedokladne-sortowanie-quicksort</guid>
<pubDate>Fri, 29 May 2015 19:54:17 +0000</pubDate>
</item>
<item>
<title>qsort tablicy dwuwymiarowej</title>
<link>https://forum.pasja-informatyki.pl/11906/qsort-tablicy-dwuwymiarowej</link>
<description>

&lt;p&gt;Hej.&lt;/p&gt;



&lt;p&gt;Wiem jak używać qsorta dla tablicy jednowymiarowej ale problem zaczął się gdy chciałem posortować poszczególne kolumny tablicy dwuwymiarowej. Przekazywanie jednej kolmuny do funkcji qsort za pomocą *(tab+i) nie działa. Zamieszczam fragment kodu:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#define sizex 10
#define sizey 15

char losuj(void);
int my_compare (const void *, const void *);
int main(void)
{
	int i,j;
	char **tab;
	srand(time(NULL));

	//alokuje pamiec na tablice wskaznikow do tablic
	tab=(char**)malloc(sizex*sizeof(char*));
	//alokuje tablice drugiego wymiaru
	for(i=0; i&amp;lt;sizex; i++)
		*(tab+i)=(char*)malloc(sizey*sizeof(char));
	//wypelniam tablice
	for(i=0; i&amp;lt;sizex;i++)
	{
		for(j=0; j&amp;lt;sizey; j++)
		{
			tab[i][j]=losuj();
			printf(&quot;%c &quot;, tab[i][j]);
		}
		puts(&quot;\n&quot;);
	}

	//qsortowanie
	for(i=0; i&amp;lt;sizex; i++)
		qsort(*(tab+i), sizey, sizeof(char), my_compare);

	//wypisanie tablicy posrtowanej
	puts(&quot;SORT&quot;);
	for(i=0; i&amp;lt;sizex;i++)
	{
		for(j=0; j&amp;lt;sizey; j++)
		{
			printf(&quot;%c &quot;, tab[i][j]);
		}
		puts(&quot;\n&quot;);
	}

	//dokonuje dealokacji
	for(i=0; i&amp;lt;sizex; i++)
		free(*(tab+i));
	free(tab);
	
	return 0;
}

int my_compare (const void * a, const void * b)
{
	const char **ia=(const char **)a;
	const char **ib=(const char **)b;
	return strcmp(*ia, *ib);
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/11906/qsort-tablicy-dwuwymiarowej</guid>
<pubDate>Sun, 19 Apr 2015 16:34:38 +0000</pubDate>
</item>
<item>
<title>[C++] Sortowanie szybkie</title>
<link>https://forum.pasja-informatyki.pl/5558/c-sortowanie-szybkie</link>
<description>

&lt;p&gt;Witam, proszę Was o uzupełnienie algorytmu sortowania szybkiego o komentarze. Chodzi o to że nie do końca rozumiem działanie samej funkcji.&lt;/p&gt;



&lt;p&gt;Wiem że algorytm dzieli tablice na dwie partycje, nastepnie zaczyna dzielić te partycje na kolejne metodą &quot;Dziel i zwyciężaj&quot; jednak nie rozumiem np. tej części kodu, wiem że zapętla on działanie funkcji (rekurencja) partycjując coraz mniejsze zbiory, ale dlaczego np. dane wprowadzane do funkcji 'Sortowanie' są różne od siebie&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
if (q&amp;gt;lewy) Sortowanie(tablica,lewy,q);         
if (p&amp;lt;prawy) Sortowanie(tablica,p,prawy);&lt;/pre&gt;



&lt;p&gt;tzn. występuje (tablica,lewy,q), a dlaczego niżej nie ma (tablica,prawy,p) tylko (tablica,p,prawy).
&lt;br&gt;

&lt;br&gt;
Proszę o pomoc, najlepiej by było gdyby ktoś uzupełnił algorytm o odpowiednie komentarze.&amp;nbsp;Oto kod:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void Sortowanie(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2]; 
    p=lewy;
    q=prawy;
    do
    {
        while (tablica[p]&amp;lt;v) p++;                  
        while (tablica[q]&amp;gt;v) q--;
        if (p&amp;lt;=q)
        {
            swap (tablica[p],tablica[q]);
            p++;
            q--;
        }
    }   while (p&amp;lt;=q);
    if (q&amp;gt;lewy) Sortowanie(tablica,lewy,q);         
    if (p&amp;lt;prawy) Sortowanie(tablica,p,prawy);
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/5558/c-sortowanie-szybkie</guid>
<pubDate>Thu, 09 Apr 2015 13:06:35 +0000</pubDate>
</item>
</channel>
</rss>