Problem Array.Sort()

0

Witam.
Mam program który wypisuje mi kilka liczb losowych do tablicy. I następnie gdy wpisuję wartość tablicy i dana wartość znajduje się w tablicy to program zwraca mi wartość indeksu tablicy a jeżeli nie wyświetla -1. Zostało mi jedynie do posortowania tablica. Muszę ją posortować za pomocą Array.Sort(Wektor) i właśnie tablica sortuje, tylko jest jakiś błąd bo jako Wektor[0] i Wektor[1] zawsze jest 0. Proszę o pomoc.

using System;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string a;
            int Szukana;
            int indeks;
            int[] Wektor;
            Random GeneratorLiczb;
            int LiczbaWylosowana;




            GeneratorLiczb = new Random();
            LiczbaWylosowana = 0;
            Wektor = new int[5];


            for (int i = 0; i < Wektor.Length; i++)
            {
                LiczbaWylosowana = GeneratorLiczb.Next(10000);

                Wektor[i] = LiczbaWylosowana;
                Array.Sort(Wektor);
                Console.WriteLine("Tablica [" + i + "] = " + Wektor[i]);
            }

            Console.WriteLine("Szukane x = ? ");

            a = Console.ReadLine();
            Szukana = Int32.Parse(a);

            indeks = Wyszukiwanie(Wektor, Szukana);

            Console.WriteLine("Szukany indeks to :" + indeks);
            Console.Read();
        }

        public static int Wyszukiwanie(int[] Wektor, int x)
        {
            int i;
            int j;
            int k;

            bool Zakoncz;


            i = 0;
            j = Wektor.Length - 1;
            k = -1;
            Zakoncz = false;

            do
            {
                if (Wektor[i] == x)
                {
                    k = i;
                    Zakoncz = true;
                }
                if (Wektor[j] == x)
                {
                    k = j;
                    Zakoncz = true;
                }
                if (j - i <= 1)
                {
                    if (Zakoncz == false)
                    {
                        k = -1;
                        Zakoncz = true;
                    }
                }
                if (Zakoncz == false)
                {
                    k = (int)((j - i) / 2) + i;
                    if (Wektor[k] == x) Zakoncz = true;
                    if (Wektor[k] < x) i = k;
                    if (Wektor[k] > x) j = k;
                }
            }
            while (Zakoncz == false);
            return k;



        }
    }
}
1

Czemu sortujesz w każdym przebiegu pętli? Przecież w ten sposób Twoje Console.WriteLine z linijki po Array.Sort wyświetla złe dane.
Czemu w funkcji Wyszukiwanie użyłeś do...while z milionem zmiennych i warunków, zamiast prostego for?
A tak na marginesie - po co rozdzielasz deklaracje od inicjalizacji?

0

Gdy sortowałem poza pętla, to nie sortuję się wcale. Nad użyciem jednej pętli for pomyślę, tylko póki co chce uzyskać odpowiedni wynik.

////edit

Użyłem drugiej pętli for do sortowania i wypisywania i działa :)

Mówisz żeby zastąpić całą pętle do while jedna pętla for ?

1

@GlupiHomik, czyli o takie coś chodzi?

public static int Wyszukiwanie(int[] wektor, int x)
{
    for (int i = 0; i < wektor.Length; i++)
    {
        if (wektor[i] == x)
            return i;   
    }
    return -1;
}
0

dokładnie o to :p teraz muszę to przeanalizować...

dziękuję bardzo, temat do zamknięcia :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1