Ребята, может кто объяснить как сделать имено пузырьковую сортировку, с OrderBy я сделала и она работает, но хочу понять имено пузырьковую сортировку. Дан класс день рождения, с полями int день, месяц, год. Заполняется через консоль в список.
Пошарила в интернете, но применив выдает ошибку при сравнении элементов. Не могу понять как ее можно сделать.
Может кто знает и есть время дать наводку или подсказку.
C#
Пузырьковая сортировка в С#.
using System;
using System.Collections.Generic;
namespace Answer {
class Program {
static void Main() {
var list = new List<Birthday>();
Console.Write("Количество данных в списке: ");
var n = int.Parse(Console.ReadLine());
for (var i = 0; i < n; ++i) {
var birthday = InputBirthday();
list.Add(birthday);
Console.WriteLine();
}
Console.WriteLine("Отсортированный список:");
list = SortBubble(list);
foreach (var item in list) Console.WriteLine(item);
Console.ReadKey();
}
static Birthday InputBirthday() {
return new Birthday {
Day = Integer("Число: "),
Month = Integer("Месяц: "),
Year = Integer("Год рождения: ")
};
}
static List<Birthday> SortBubble(List<Birthday> list) {
Birthday temp;
for (var i = 0; i < list.Count - 1; ++i) {
for (var j = 0; j < list.Count - i - 1; ++j) {
if (list[j + 1] < list[j]) {
temp = list[j + 1];
list[j + 1] = list[j];
list[j] = temp;
}
}
}
return list;
}
static int Integer(string msg) {
int value;
do {
Console.Write(msg);
} while (!int.TryParse(Console.ReadLine(), out value));
return value;
}
}
class Birthday {
public Birthday() {
Day = Month = Year = 0;
}
public int Day { get; set; }
public int Month { get; set; }
public int Year { get; set; }
public static bool operator>(Birthday a, Birthday b) {
if (a.Year > b.Year) return true;
if (a.Year == b.Year && a.Month > b.Month) return true;
if (a.Month == b.Month && a.Day > b.Day) return true;
return false;
}
public static bool operator<(Birthday a, Birthday b) {
if (a.Year < b.Year) return true;
if (a.Year == b.Year && a.Month < b.Month) return true;
if (a.Month == b.Month && a.Day < b.Day) return true;
return false;
}
public override string ToString() {
return $"{Day:D2}.{Month:D2}.{Year:D2}";
}
}
}
using System.Collections.Generic;
namespace Answer {
class Program {
static void Main() {
var list = new List<Birthday>();
Console.Write("Количество данных в списке: ");
var n = int.Parse(Console.ReadLine());
for (var i = 0; i < n; ++i) {
var birthday = InputBirthday();
list.Add(birthday);
Console.WriteLine();
}
Console.WriteLine("Отсортированный список:");
list = SortBubble(list);
foreach (var item in list) Console.WriteLine(item);
Console.ReadKey();
}
static Birthday InputBirthday() {
return new Birthday {
Day = Integer("Число: "),
Month = Integer("Месяц: "),
Year = Integer("Год рождения: ")
};
}
static List<Birthday> SortBubble(List<Birthday> list) {
Birthday temp;
for (var i = 0; i < list.Count - 1; ++i) {
for (var j = 0; j < list.Count - i - 1; ++j) {
if (list[j + 1] < list[j]) {
temp = list[j + 1];
list[j + 1] = list[j];
list[j] = temp;
}
}
}
return list;
}
static int Integer(string msg) {
int value;
do {
Console.Write(msg);
} while (!int.TryParse(Console.ReadLine(), out value));
return value;
}
}
class Birthday {
public Birthday() {
Day = Month = Year = 0;
}
public int Day { get; set; }
public int Month { get; set; }
public int Year { get; set; }
public static bool operator>(Birthday a, Birthday b) {
if (a.Year > b.Year) return true;
if (a.Year == b.Year && a.Month > b.Month) return true;
if (a.Month == b.Month && a.Day > b.Day) return true;
return false;
}
public static bool operator<(Birthday a, Birthday b) {
if (a.Year < b.Year) return true;
if (a.Year == b.Year && a.Month < b.Month) return true;
if (a.Month == b.Month && a.Day < b.Day) return true;
return false;
}
public override string ToString() {
return $"{Day:D2}.{Month:D2}.{Year:D2}";
}
}
}
Скорее всего нужно будет сортировать и день, и месяц, и год
Покажите, как сравниваете элементы
Похожие вопросы
- Сортировка Двумерного массива C#
- Сколько времени займет на С# выполнение этого алгоритма сортировки массива?
- Пузырьковая сортировка. Нужен код в Dev C++ 4.9.9.2 Отсортировать не менее 20 чисел по убыванию...
- Одномерные массивы. Пузырьковая сортировка. С++
- Проблемы с пузырьковой сортировкой.
- Паскаль: пузырьковый метод(сортировка).
- - а вы товарищи поэты знаете что такое сортировка пузырьковым методом ?
- Сравнение скорости сортировки выбором и сортировки слиянием (SelectionSort vs MergeSort)
- Изучил несколько простых алгоритмов сортировки, осталось изучить быструю и слияние, нужно ли вообще писать эти алгоритмы
- Сортировки, язык Си.
for (int i = 0; i < nums.Length-1; i++)
{
for (int j = i + 1; j < nums.Length; j++)
{
if (nums[i] > nums[j])
{
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
Типо такого, только для списка, вот в if выдает ошибку.
Надо только по году, если года одинаковы, по месяцу, если месяцы одинаковы по дню. Мозг взорвался
public static bool operator >(Nums c1, Nums c2)
{
return c1.Year > c2.Year;
}
, либо в приведенном коде сравнивать соответствующие поля, если они там есть, т. е.
if (nums[i].Year > nums[j].Year)