» »

[C#] Counting sort

[C#] Counting sort

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();
        }

    }
}

amacar ::

Poizkusi:
for (int i = trackBar1.Value - 1; i >= 0; i--)
            {
                int stevilo = stevila[i];
                polje1[stevilo]--;
                polje2[polje1[stevilo]] = stevilo;
                
            }

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?

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

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.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

križci krožci c # (strani: 1 2 )

Oddelek: Programiranje
5012133 (10792) Yacked2
»

[C#] Input string was not in a correct format.

Oddelek: Programiranje
61102 (1039) Cvenemir
»

[C#] pomoc pri vpisu elementov v listBox

Oddelek: Programiranje
101324 (1239) keworkian
»

c# datagridview in combox

Oddelek: Programiranje
131228 (1116) OmegaM
»

C# textbox polnjenje

Oddelek: Programiranje
71644 (1509) Mitja Bonča

Več podobnih tem