using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Sorting { public partial class Form1 : Form { int[] pole_b = new int[100000]; int[] pole_a = new int[100000]; int[] pole_q = new int[100000]; int pocet; StringBuilder sb_b = new StringBuilder(); StringBuilder sb_a = new StringBuilder(); StringBuilder sb_q = new StringBuilder(); int klik_b = 0; int klik_a = 0; int klik_q = 0; char pad = ' '; public void BubbleSort(int[] pole) { int pom; int max = pocet; bool konec; do { konec = false; for (int i = 1; i < max; i++) { if (pole[i - 1] > pole[i]) { konec = true; pom = pole[i - 1]; pole[i - 1] = pole[i]; pole[i] = pom; } } max--; } while (konec); } public void QuickSort(int[] pole, int l, int r) { int zacatek; int konec; if (l < r) { int pivot = pole[(l + r) / 2]; // pivot nastaven na prostřední prvek oblasti zacatek = l; konec = r; do { while (pole[zacatek] < pivot) { zacatek++; } while (pole[konec] > pivot) { konec--; } if (zacatek <= konec) { swap(pole, zacatek, konec); zacatek++; konec--; } } while (!(zacatek > konec)); // Rozdělení je dokončeno, nové intervaly jsou a if (konec - l <= r - zacatek) //kratší úsek třídíme nejprve { QuickSort(pole, l, konec); QuickSort(pole, zacatek, r); } else { QuickSort(pole, zacatek, r); QuickSort(pole, l, konec); } } } public void swap(int[] pole, int index1, int index2) { int temp = pole[index1]; pole[index1] = pole[index2]; pole[index2] = temp; } public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { textBox_gen.Text = ""; textBox_gen.Focus(); textBox_bubble.Clear(); textBox_array.Clear(); textBox_quick.Clear(); sb_b.Clear(); sb_a.Clear(); sb_q.Clear(); label_cas_bubble.Text = ""; label_cas_array.Text = ""; label_cas_quick.Text = ""; } private void textBox_gen_KeyPress(object sender, KeyPressEventArgs e) { if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || (e.KeyChar == 8))) { e.KeyChar = Convert.ToChar(0); } } private void button_vymaz_Click(object sender, EventArgs e) { textBox_gen.Text = ""; textBox_gen.Focus(); textBox_bubble.Clear(); textBox_array.Clear(); textBox_quick.Clear(); sb_b.Clear(); sb_a.Clear(); sb_q.Clear(); label_cas_bubble.Text = ""; label_cas_array.Text = ""; label_cas_quick.Text = ""; klik_b = 0; klik_a = 0; klik_q = 0; } private void pictureBox1_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("https://www.itnetwork.cz/algoritmy/razeni/algoritmus-bubblesort-probublavani-trideni-cisel"); } private void button_gen_Click(object sender, EventArgs e) { textBox_bubble.Clear(); textBox_array.Clear(); textBox_quick.Clear(); sb_b.Clear(); sb_a.Clear(); sb_q.Clear(); label_cas_bubble.Text = ""; label_cas_array.Text = ""; label_cas_quick.Text = ""; klik_b = 0; klik_a = 0; klik_q = 0; Random generator = new Random(); try { if (textBox_gen.Text == "") { MessageBox.Show("Musíte zadat číslo!", "Upozornění", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); textBox_gen.Focus(); return; } else { pocet = Convert.ToInt32(textBox_gen.Text); if (pocet > 100000) { MessageBox.Show("Zadejte číslo do 100 000", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox_gen.Text = ""; textBox_gen.Focus(); return; } else { for (int i = 0; i < pocet; i++) { pole_b[i] = 0; } for (int i = 0; i < pocet; i++) { pole_a[i] = 0; } for (int i = 0; i < pocet; i++) { pole_q[i] = 0; } for (int i = 0; i < pocet; i++) { pole_b[i] = generator.Next(10, 500000); } for (int i = 0; i < pocet; i++) { pole_a[i] = pole_b[i]; } for (int i = 0; i < pocet; i++) { pole_q[i] = pole_b[i]; } for (int i = 0; i < pocet; i++) { sb_b.AppendLine(Convert.ToString(pole_b[i]).PadLeft(10,pad)); sb_a.AppendLine(Convert.ToString(pole_a[i]).PadLeft(10,pad)); sb_q.AppendLine(Convert.ToString(pole_q[i]).PadLeft(10,pad)); } textBox_bubble.Text = sb_b.ToString(); textBox_array.Text = sb_a.ToString(); textBox_quick.Text = sb_q.ToString(); } } } catch (OverflowException) { MessageBox.Show("Zadejte maximálně 100 000", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox_gen.Text = ""; textBox_gen.Focus(); return; } } private void textBox_gen_TextChanged(object sender, EventArgs e) { textBox_bubble.Clear(); textBox_array.Clear(); textBox_quick.Clear(); sb_b.Clear(); sb_a.Clear(); sb_q.Clear(); label_cas_bubble.Text = ""; label_cas_array.Text = ""; label_cas_quick.Text = ""; klik_b = 0; klik_a = 0; klik_q = 0; } private void button_bubble_Click(object sender, EventArgs e) { klik_b++; if ((textBox_gen.Text == "") || (sb_b.Length == 0)) { MessageBox.Show("Není co třídit!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { sb_b.Clear(); textBox_bubble.Clear(); int start = Environment.TickCount; BubbleSort(pole_b); for (int i = 0; i < pocet; i++) { sb_b.AppendLine(Convert.ToString(pole_b[i]).PadLeft(10, pad)); } textBox_bubble.Text = sb_b.ToString(); int stop = Environment.TickCount; if (klik_b == 1) { label_cas_bubble.Text = "Setřídění BubbleSort trvalo: " + (stop - start).ToString() + " ms"; } } } private void button_array_Click(object sender, EventArgs e) { klik_a++; if ((textBox_gen.Text == "") || (sb_a.Length == 0)) { MessageBox.Show("Není co třídit!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { sb_a.Clear(); textBox_array.Clear(); int start = Environment.TickCount; Array.Sort(pole_a,0,pocet); for (int i = 0; i < pocet; i++) { sb_a.AppendLine(Convert.ToString(pole_a[i]).PadLeft(10, pad)); } textBox_array.Text = sb_a.ToString(); int stop = Environment.TickCount; if (klik_a == 1) { label_cas_array.Text = "Setřídění ArraySort trvalo: " + (stop - start).ToString() + " ms"; } } } private void button_quick_Click(object sender, EventArgs e) { klik_q++; if ((textBox_gen.Text == "") || (sb_q.Length == 0)) { MessageBox.Show("Není co třídit!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { sb_q.Clear(); textBox_quick.Clear(); int start = Environment.TickCount; QuickSort(pole_q, 0, pocet-1); for (int i = 0; i < pocet; i++) { sb_q.AppendLine(Convert.ToString(pole_q[i]).PadLeft(10, pad)); } textBox_quick.Text = sb_q.ToString(); int stop = Environment.TickCount; if (klik_q == 1) { label_cas_quick.Text = "Setřídění QuickSort trvalo: " + (stop - start).ToString() + " ms"; } } } } }