Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 17:50   #1
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
Лампочка Бинарная(быстрая) сортировка

Выставляю этот код для критики, не знаю как правильно он должен выглядеть, но по тому объяснению как этот метод работает который я понял получилось вот так, вроде работает правильно.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static int[] SortArray(int[] mass)
        {
            int oporn = mass[mass.Length / 2], m1 = 0, n1 = 0, m2 = 0, n2 = 0, m3 = 0, n3 = 0;
            for (int i = 0; i < mass.Length; i++)
            {
                if (mass[i] < oporn) m1++;
                if (mass[i] == oporn) m2++;
                if (mass[i] > oporn) m3++;
            }
            int[] mass1 = new int[m1];
            int[] mass2 = new int[m2];
            int[] mass3 = new int[m3];
            for (int i = 0; i < mass.Length; i++)
            {
                if (mass[i] < oporn) { mass1[n1] = mass[i]; n1++; }
                if (mass[i] == oporn) { mass2[n2] = mass[i]; n2++; }
                if (mass[i] > oporn) { mass3[n3] = mass[i]; n3++; }
            }
            if (m1 > 1) mass1 = SortArray(mass1);
            if (m2 > 1) mass2 = SortArray(mass2);
            if (m3 > 1) mass3 = SortArray(mass3);
            for (int i = 0; i < mass1.Length; i++)
                mass[i] = mass1[i];
            for (int i = mass1.Length, j = 0; j < mass2.Length; j++, i++)
                mass[i] = mass2[j];
            for (int i = mass1.Length + mass2.Length, j = 0; j < mass3.Length; j++, i++)
                mass[i] = mass3[j];
            return (mass);
        }
        static void Main(string[] args)
        {
            int[] mass = new int[10];
            Random r= new Random();
            for (int i = 0; i < mass.Length; i++)
            {
                mass[i] = r.Next(-100, 101);
                Console.Write(mass[i] + " ");
            }
            Console.WriteLine();
            SortArray(mass);
            for (int i = 0; i < mass.Length; i++)
                Console.Write(mass[i] + " ");
            Console.ReadKey();
        }
    }
}
правда иногда вылезает вот эта гадость, почему понять не могу
Изображения
Тип файла: jpg Безымянный.jpg (170.5 Кб, 89 просмотров)
Программист это не профессия, программист - это образ жизни.

Последний раз редактировалось Prizrak86; 09.02.2012 в 18:02.
Prizrak86 вне форума Ответить с цитированием
Старый 09.02.2012, 18:11   #2
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Врятли кто то будет раскурить это и с задумчивыми видом рассуждать наскока этот код прекрасен
Guy вне форума Ответить с цитированием
Старый 09.02.2012, 18:19   #3
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
Врятли кто то будет раскурить это и с задумчивыми видом рассуждать наскока этот код прекрасен
тогда вопрос конкретней, причина по которой ошибка выходит?
Программист это не профессия, программист - это образ жизни.
Prizrak86 вне форума Ответить с цитированием
Старый 09.02.2012, 19:52   #4
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию

нашел почему так, это зацикливание, только рекурсивное, возникает когда элементы одинаковые в массиве, вот как вышел из ситуации.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static int[] SortArray(int[] mass)
        {
            int oporn = mass[mass.Length / 2], m1 = 0, n1 = 0, m2 = 0, n2 = 0, m3 = 0, n3 = 0;
            for (int i = 0; i < mass.Length; i++)
            {
                if (mass[i] < oporn) m1++;
                if (mass[i] == oporn) m2++;
                if (mass[i] > oporn) m3++;
            }
            int[] mass1 = new int[m1];
            int[] mass2 = new int[m2];
            int[] mass3 = new int[m3];
            for (int i = 0; i < mass.Length; i++)
            {
                if (mass[i] < oporn) { mass1[n1] = mass[i]; n1++; }
                if (mass[i] == oporn) { mass2[n2] = mass[i]; n2++; }
                if (mass[i] > oporn) { mass3[n3] = mass[i]; n3++; }
            }
            if (!(m1 == 0 && m2 == 0 || m1 == 0 && m3 == 0 || m2 == 0 && m3 == 0))
            {
                if (m1 > 1) mass1 = SortArray(mass1);
                if (m2 > 1) mass2 = SortArray(mass2);
                if (m3 > 1) mass3 = SortArray(mass3);
            }
            for (int i = 0; i < mass1.Length; i++)
                    mass[i] = mass1[i];
                for (int i = mass1.Length, j = 0; j < mass2.Length; j++, i++)
                    mass[i] = mass2[j];
                for (int i = mass1.Length + mass2.Length, j = 0; j < mass3.Length; j++, i++)
                    mass[i] = mass3[j];
                return (mass);
        }
        static void Main(string[] args)
        {
            int[] mass = new int[10];
            Random r = new Random();
            for (int i = 0; i < mass.Length; i++)
            {
                mass[i] = r.Next(-1, 2);
                Console.Write(mass[i] + " ");
            }
            Console.WriteLine();
            SortArray(mass);
            for (int i = 0; i < mass.Length; i++)
                Console.Write(mass[i] + " ");
            Console.ReadKey();
        }
    }
}
Программист это не профессия, программист - это образ жизни.

Последний раз редактировалось Prizrak86; 09.02.2012 в 19:54.
Prizrak86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка хаора) с++ LustHunter Помощь студентам 3 07.10.2011 19:37
Быстрая сортировка Юлия999 Паскаль, Turbo Pascal, PascalABC.NET 0 22.05.2011 12:32
Бинарная сортировка - Pascal ctakanzor4 Помощь студентам 0 13.11.2010 02:15
быстрая сортировка настолько быстрая Serg12 Помощь студентам 8 28.03.2010 21:31
быстрая сортировка ГРИГОРИЙ-кореш Помощь студентам 1 16.04.2009 18:13