Согласованная сортировка двухмерного массива - C#
Формулировка задачи:
Выводит не то, что нужно...
Выводит отсортированные строки ВСЕ по порядку. А нужно только первую по порядку, т.е. привязать к первой строке все остальные столбцы(или строки, кто как понимает).
Пример массива из сортировок ниже:
Выводит на обоих сортировках так:
Ребята, выручайте
int[,] array = {{4,3,1,2},
{4,6,7,6},
{8,4,1,5}}; {1,2,3,4},
{4,6,6,7},
{1,4,5,8}А нужно вот так:
{1,2,3,4},
{7,6,6,4},
{1,5,4,8}Сортировка 2-х мерного массива ВСТАВКАМИ:
static void Main(string[] args)
{
// Инициализация массива.
int[,] array = {{4,3,1,2},
{4,6,7,6},
{8,4,1,5}};
// Инициализация переменных.
int max_size_strok = array.GetLength(0) - 1; // Отчет с нуля (для удобства).
// Пример: 3 4 1 max_size_strok == 2 - 1 == 1 [0,0] [0,1] [0,2]
// 5 2 9 max_size_stolbtsov == 3 - 1 == 2 [1,0] [1,1] [1,2]
int max_size_stolbtsov = array.GetLength(1) - 1; // Отчет с нуля (для удобства).
int save = 0; // Помогает менять местами элементы массива.
//Вывод массива.
Console.WriteLine("Исходный массив:\n");
for (int i = 0; i <= max_size_strok; i++)
{
for (int j = 0; j <= max_size_stolbtsov; j++)
{
Console.Write("{0}\t", array[i, j]);
}
Console.WriteLine();
}
//Сортировка массива ВСТАВКАМИ.
for (int k = 0; k <= max_size_strok; k++)
{
for (int j = 0; j <= max_size_stolbtsov; j++)
{
for (int i = 0; i <= max_size_stolbtsov - 1; i++)
if (array[k, i] > array[k, i + 1])
{
save = array[k, i];
array[k, i] = array[k, i + 1];
array[k, i + 1] = save;
}
}
}
//Вывод массива.
Console.WriteLine("\nОтсортированный массив:\n");
for (int i = 0; i <= max_size_strok; i++)
{
for (int j = 0; j <= max_size_stolbtsov; j++)
{
Console.Write("{0}\t", array[i, j]);
}
Console.WriteLine();
}
// Задержка.
Console.ReadKey();
}Сортировка 2-х мерного массива ВЫБОРОМ:
static void Main(string[] args)
{
// Инициализация массива.
int[,] array = {{4,3,1,2},
{4,6,7,6},
{8,4,1,5}};
// Инициализация переменных.
int max_size_strok = array.GetLength(0) - 1; // Отчет с нуля (для удобства).
// Пример: 3 4 1 max_size_strok == 2 - 1 == 1 [0,0] [0,1] [0,2]
// 5 2 9 max_size_stolbtsov == 3 - 1 == 2 [1,0] [1,1] [1,2]
int max_size_stolbtsov = array.GetLength(1) - 1; // Отчет с нуля (для удобства).
int save = 0; // Помогает менять местами элементы массива.
//Вывод массива.
Console.WriteLine("Исходный массив:\n");
for (int i = 0; i <= max_size_strok; i++)
{
for (int j = 0; j <= max_size_stolbtsov; j++)
{
Console.Write("{0}\t", array[i, j]);
}
Console.WriteLine();
}
//Сортировка массива ВЫБОРОМ.
for (int k = 0; k <= max_size_strok; k++)
{
for (int i = 0; i <= max_size_stolbtsov; i++)
{
int min = i;
for (int j = i + 1; j <= max_size_stolbtsov; j++)
{
if (array[k, j] < array[k, min])
{
min = j;
}
}
save = array[k, i];
array[k, i] = array[k, min];
array[k, min] = save;
}
}
//Вывод массива.
Console.WriteLine("\nОтсортированный массив:\n");
for (int i = 0; i <= max_size_strok; i++)
{
for (int j = 0; j <= max_size_stolbtsov; j++)
{
Console.Write("{0}\t", array[i, j]);
}
Console.WriteLine();
}
// Задержка.
Console.ReadKey();}Решение задачи: «Согласованная сортировка двухмерного массива»
textual
Листинг программы
//Сортировка массива ВСТАВКАМИ.
for (int i = 0; i <= max_size_strok; i++)
{
for (int j = 0; j < max_size_stolbtsov; j++)
{
if (array[0, j] >= array[0, j + 1])
{
for (int k = 0; k <= max_size_stolbtsov - 1; k++)
{
save = array[k, j];
array[k, j] = array[k, j + 1];
array[k, j + 1] = save;
}
}
}
}