Обобщение

Тема в разделе ".NET", создана пользователем kurzon, 19 окт 2007.

  1. kurzon

    kurzon Гость

    Это обобщение в сортировке методом вставка.
    Проблема при сортировке не получаться сранивать масивы...
    Код (Text):
    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[i];

    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) )
    Код (Text):
    for (j = i-1; (array[i-1]> temp)&&(j < 0); j--)
     
  2. Pasha

    Pasha Гость

    Для: kurzon
    Код (Text):
    comparison(array[i-1], temp) > 0
     
  3. kurzon

    kurzon Гость

  4. kurzon

    kurzon Гость

    Уже исправил ошибку, но появилась новая(не совсем ошибка)
    Мене надо что так было (comparison(array[ j -1], temp) , но не работает.
    А работает так (comparison(array[ i -1], temp)
    Код (Text):
    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[i];

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

    }

    array[j + 1] = temp;

    }

    }
    }
    Вот мой полный исходник:
     

    Вложения:

    • 1.txt
      Размер файла:
      3,1 КБ
      Просмотров:
      32
  5. Pasha

    Pasha Гость

    Для: kurzon
    А оно должно работать?
     
  6. kurzon

    kurzon Гость

    Ктото поможет...
     
  7. Pasha

    Pasha Гость

    Для: kurzon
    Ты перед написанием куска кода представляешь как он должен работать? Ну, хотя бы в общих чертах? Вот зачем в этом куске тебе нужно j?
     
  8. kurzon

    kurzon Гость

    Вот мене надо написать сортировку методом вставка
    Вот исходник:
    Код (Text):
    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[i];
    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[i];
    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[i];
    array[i] = temp; // меняем местами наименьший с a[i]


    }

    }
    }


    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[i] = 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();
    }
    }
    }
    Код (Text):
    [b]Вот сам кусок программы для сортировки:[/b]

    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[i];
    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, это не правыльно и будет не правильно выводить результат.
    Код (Text):
    (comparison(array[ j-1], temp) > 0)
    А с j не хочет работать.
    Плиз...
     
  9. Pasha

    Pasha Гость

  10. kurzon

    kurzon Гость

    2Pasha У меня точно такой самый...
    Я все переписал и переделал с заменой...
     
  11. Pasha

    Pasha Гость

    Для: kurzon
    Переписал? Вот именно поэтому и не работает. Если не способен понять мегаалгоритм, не пытайся его переделать, просто возьми их код и замени сравенение на Comparison. А то в процессе переписывания произошли странные вещи. j>=0 почему-то стоит у тебя после обращения к массиву, индексы поменялись.
     
  12. kurzon

    kurzon Гость

Поделиться этой страницей