1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Обобщение

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

  1. kurzon

    kurzon Гость

    Репутация:
    0
    Это обобщение в сортировке методом вставка.
    Проблема при сортировке не получаться сранивать масивы...
    Код:
    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) )
    Код:
    for (j = i-1; (array[i-1]> temp)&&(j < 0); j--)
     
  2. Pasha

    Pasha Гость

    Репутация:
    0
    Для: kurzon
    Код:
    comparison(array[i-1], temp) > 0
     
  3. kurzon

    kurzon Гость

    Репутация:
    0
  4. kurzon

    kurzon Гость

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

    Репутация:
    0
    Для: kurzon
    А оно должно работать?
     
  6. kurzon

    kurzon Гость

    Репутация:
    0
    Ктото поможет...
     
  7. Pasha

    Pasha Гость

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

    kurzon Гость

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

    Pasha Гость

    Репутация:
    0
  10. kurzon

    kurzon Гость

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

    Pasha Гость

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

    kurzon Гость

    Репутация:
    0

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