Forum » Programiranje » [C#] Counting sort
[C#] Counting sort
![](https://static.slo-tech.com/stili/avatar_gray.gif)
Zynga ::
Naletel sem na težavo, ki se ji reče "Index was outside the bounds of the array.". Po nekem premišljevanju, mi še zdaj ni jasno, kaj je narobe. Vem, da napaka pomeni, da sem pisal mimo polja, samo nevem točno kako bi to odpravil :
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 Counting_sort { public partial class Form1 : Form { Random rand = new Random(); int[] stevila; // seznam neurejenih števil int[] polje1; // polje indexov int[] polje2; public Form1() { InitializeComponent(); } private void trackBar1_Scroll(object sender, EventArgs e) { int r_number; stevila = new int[trackBar1.Value]; textBox1.Text = trackBar1.Value.ToString(); for (int i = 0; i < trackBar1.Value; i++) { r_number = rand.Next(trackBar1.Value); listBox1.Items.Add(r_number); stevila[i] = r_number; } } private void CountingSort() { polje1 = new int[trackBar1.Value]; polje2 = new int[trackBar1.Value]; for (int i = 0; i < polje1.Length; i++) { polje1[i] = 0; // postavimo vse elemente na vsakem indexu v polju na 0 polje2[i] = 0; } for (int i = 0; i < polje1.Length; i++) { polje1[stevila[i]]++; // pristejemo +1 za vsak index, kjer je cifra } // komulativne vrednosti (seštejemo index z i+1) for (int i = 1; i < polje1.Length; i++) // 1 zato ker na indexu stevilka 0 ostane cifra { polje1[i] = polje1[i] + polje1[i - 1]; } // tukaj se pojavi napaka : for (int i = trackBar1.Value - 1; i >= 0; i--) { int stevilo = stevila[i]; polje2[polje1[stevilo]] = stevilo; polje1[stevilo] = polje1[stevilo] - 1; } // samo za izpis (za preverjanje) for (int i = 0; i < polje1.Length; i++) { listBox2.Items.Add(polje1[i]); } } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void button1_Click(object sender, EventArgs e) { CountingSort(); } } }
![](https://static.slo-tech.com/stili/avatar_gray.gif)
amacar ::
Poizkusi:
for (int i = trackBar1.Value - 1; i >= 0; i--) { int stevilo = stevila[i]; polje1[stevilo]--; polje2[polje1[stevilo]] = stevilo; }
![](https://static.slo-tech.com/stili/avatar_gray.gif)
Zynga ::
Hvala, deluje. Zakaj pa najprej zmanjšam na števnem polju (polje1) vrednost in potem vpišem v polje2? Zaradi tega, ker začnem štet Length-1?
![](https://static.slo-tech.com/stili/avatar_gray.gif)
Zynga ::
Malo sem bil prehiter. Zdaj imam drug problem, namreč če se število ponovi mi števila ne doda, na konec polja pa mi izpiše 0. Primer :
neurejeno polje : 32,4,7,32,5,4
urejeno(v mojem primeru) : 4,5,7,32,0,0
neurejeno polje : 32,4,7,32,5,4
urejeno(v mojem primeru) : 4,5,7,32,0,0
![](https://static.slo-tech.com/stili/avatar_gray.gif)
amacar ::
Zmanjšaš zato, ker če imaš recimo 6 števil imaš indexe samo do 5.
Em, za izpis pa v list dodajaj iz polja2, ne iz polja1.
Če pa ne bo delalo, pa mi pošlji projekt na amadej.pevec@gmail.com pa bom pogledal.
Em, za izpis pa v list dodajaj iz polja2, ne iz polja1.
Če pa ne bo delalo, pa mi pošlji projekt na amadej.pevec@gmail.com pa bom pogledal.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | križci krožci c # (strani: 1 2 )Oddelek: Programiranje | 12133 (10792) | Yacked2 |
» | [C#] Input string was not in a correct format.Oddelek: Programiranje | 1102 (1039) | Cvenemir |
» | [C#] pomoc pri vpisu elementov v listBoxOddelek: Programiranje | 1324 (1239) | keworkian |
» | c# datagridview in comboxOddelek: Programiranje | 1228 (1116) | OmegaM |
» | C# textbox polnjenjeOddelek: Programiranje | 1644 (1509) | Mitja Bonča |