Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обобщение

6.5K
19 октября 2007 года
kurzon
87 / / 28.09.2007
Это обобщение в сортировке методом вставка.
Код:
static class VstavSort
    {
        public static void Sort1<T>(T[] array, Comparison<T> comparison)
        {
           int i,j;
            for (i = 0; i < array.Length - 1; i++)
            {
                T temp = array;
             
                for (j = i-1; (array[i-1] > temp)&&(j < 0) ; j--)
                {
                   array[j+1] = array[j];
                   
                }  

                array[j+1] = temp;
               
            }
           

        }
    }


У меня тут ошибка? ( by (array[i-1]> temp) )
 
Код:
for (j = i-1; (array[i-1]> temp)&&(j < 0) ; j--)
3
19 октября 2007 года
Green
4.8K / / 20.01.2000
А чему будет равно значение i-1 на первой итерации внешнего цикла?
Случайно, не -1 ?
6.5K
19 октября 2007 года
kurzon
87 / / 28.09.2007
Вот я переделал c
 
Код:
(array[i-1]> temp)

На
 
Код:
comparison(array[i-1], temp) > 0

Вот я переделал и ошибка:( by http://forum.vingrad.ru/act-Attach/type/post/id-1292484.html )
6.5K
19 октября 2007 года
kurzon
87 / / 28.09.2007
Уже исправил ошибку, но появилась новая(не совсем ошибка)
Мене надо что так было (comparison(array[[size=2] j [/size]-1], temp) , но не работает.
А работает так (comparison(array[[size=2] i [/size]-1], temp)
Код:
static class VstavSort
    {
        public static void Sort1<T>(T[] array, Comparison<T> comparison)
        {
            int i, j;
            for (i = 1; i < array.Length; i++)
            {
                T temp = array;

                for (j = i - 1; (comparison(array[i-1], temp) > 0)&&(j>=0); j--)
                {
                    array[j + 1] = array[j];

                }

                array[j + 1] = temp;

            }

        }
    }


Вот мой полный исходник:
6.5K
19 октября 2007 года
kurzon
87 / / 28.09.2007
Ктото поможет...
6.5K
19 октября 2007 года
kurzon
87 / / 28.09.2007
Вот мене надо написать сортировку методом вставка
Вот исходник:
Код:
using System;
using System.Collections.Generic;
using System.Text;

namespace Con_Sort
{
    struct Book
    {
        public Book(string author, int year)
        {
            this._year = year;
            this._author = author;
        }

        private int _year;

        public int Year
        {
            get { return this._year; }
            set { this._year = value; }
        }

        private string _author;

        public string Author
        {
            get { return this._author; }
            set { this._author = value; }
        }

        public override string ToString()
        {
            return String.Format("Название книги :{0}, Год :{1}", Author, Year);
        }
    }

    static class BubbleSort
    {
        public static void Sort<T>(T[] array, Comparison<T> comparison)
        {

            for (int i = array.Length - 1; i > 0; i--)
            {
                for (int j = 0; j < i; j++)
                {
                    if (comparison(array[j], array[j + 1]) > 0)
                    {
                        T temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }

        }
    }

    static class InsertSort
    {
        public static void Sort<T>(T[] array, Comparison<T> comparison)
        {
            int i, j, k;
            for (i = 1; i < array.Length; i++)
            {
                T temp = array;
                k = i;

                for (j = i - 1; (comparison(array[j-1], temp) > 0)&&(j>=0); j--)
                {
                    array[j + 1] = array[j];

                }

                array[j + 1] = temp;

            }

        }
    }
    static class selectSort
    {
        public static void Sort<T>(T[] array, Comparison<T> comparison)
        {
            int i, j, k;
            for (i = 0; i < array.Length; i++)
            {
                T temp = array;
                k = i;

                for (j = i + 1; j < array.Length; j++) // цикл выбора наименьшего элемента
                    if ((comparison(array[j], temp) > 0))
                {
                    k = j; temp = array[j]; // k - индекс наименьшего элемента
                }
            array[k] = array;
            array = temp; // меняем местами наименьший с a


            }

        }
    }


    class Teenager
    {
        private static Random random = new Random();
        private static readonly string[] messages = new string[6]
            {
                "Троесент!",
                "Ватсон!",
                "Фаронов!",
                "Шилд!",
                "Агуров!",
                "Глинський!"
            };

        public static string Complain()
        {
            return messages[random.Next(messages.Length)];
        }
    }

    class Program
    {
        static void PrintBookTitles(Book[] books)
        {
            foreach (Book book in books)
            {
                Console.WriteLine(book);
            }
        }

        static void Main(string[] args)
        {
            Book[] books = new Book[10];
            Random random = new Random();

            for (int i = 0; i < books.Length; i++)
            {
                books = new Book(Teenager.Complain(), random.Next(2007));
            }

            PrintBookTitles(books);
            //Console.Read();

            selectSort.Sort(books, delegate(Book a, Book b)
                    {
                        return a.Year.CompareTo(b.Year);
                    });

            Console.WriteLine("После сортировки:");

            PrintBookTitles(books);
            Console.ReadLine();
        }
    }
}

Код:
Вот сам кусок программы для сортировки:

static class InsertSort
    {
        public static void Sort<T>(T[] array, Comparison<T> comparison)
        {
            int i, j, k;
            for (i = 1; i < array.Length; i++)
            {
                T temp = array;
                k = i;

                for (j = i - 1; (comparison(array[ j-1], temp) > 0)&&(j>=0); j--)
                {
                    array[j + 1] = array[j];
                }

                array[j + 1] = temp;

            }

        }
    }


Если я заменю тут j на i, это не правыльно и будет не правильно выводить результат.
 
Код:
(comparison(array[ j-1], temp) > 0)

А с j не хочет работать.
Плиз...
502
20 октября 2007 года
Jail
550 / / 30.01.2007
[LEFT]Помоему у тебя во вложенном цикле for полная ерунда.... j инициализируется 0-м до первой итерации, при каждой итерации декремент, кажись j вообще висит на месте. А если изначально инициализировать j границей массива и проводить сортировку с декрементом при каждой итераци.
 
Код:
for( j = array.Length -1;  (comparison(array[ j ], temp) >0) && (j >=0); j--)

[/LEFT]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог