Тема: Сортування злиттям по спаданню
Який код? Всюди по зростанню(
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C#, .NET → Сортування злиттям по спаданню
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
А в чому складність переробити існуючий код? По ідеї, достатньо десь замінити < на > чи щось назразок...
по зростанню це ASC
що таке ASC?
А в чому складність переробити існуючий код? По ідеї, достатньо десь замінити < на > чи щось назразок...
public int[] merge3(int[] mass1, int[] mass2)
{
int a = 0, b = 0;
merged = new int[mass1.Length + mass2.Length];
for (int i = 0; i < mass1.Length + mass2.Length; i++)
{
if (b < mass2.Length && a < mass1.Length)
if (mass1[a] > mass2[b] && b < mass2.Length)
merged[i] = mass2[b++];
else
merged[i] = mass1[a++];
else
if (b < mass2.Length)
merged[i] = mass2[b++];
else
merged[i] = mass1[a++];
}
return merged;
}
поставте, а то щось в мене не вийшло
Якщо це робочий код для сортування за зростанням, то, очевидно, 8-й рядок, замість
mass1[a] > mass2[b]
треба
mass1[a] < mass2[b]
, більш я не бачу, де елементи в цьому коді порівнюються.
Який код? Всюди по зростанню(
Потрібно зрозуміти алгоритм і питання відпаде.
Ось робочий код:
using System;
using System.Globalization;
namespace Sort
{
public static class Program
{
public static void Main()
{
float[] array = InputArray();
float[] sorted = SortMerge<float>(array,
(a, b) => a < b ? 1 : a > b ? -1 : 0);
Console.Write("Sorted array :");
foreach(float v in sorted)
Console.Write(" {0}", v);
Console.WriteLine();
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
public static float[] InputArray()
{
bool invalid;
string[] s;
int i, len;
float[] array;
do
{
invalid = false;
Console.Write("Input array : ");
s = Console.ReadLine().Split(new[] { ' ', ';' },
StringSplitOptions.RemoveEmptyEntries);
len = s.GetLength(0);
array = new float[len];
for(i = 0; i < len; ++i)
{
try
{
array[i] = float.Parse(s[i], CultureInfo.InvariantCulture);
}
catch(FormatException)
{
invalid = true;
Console.WriteLine("Cannot parse string to array. Try again.");
break;
}
}
}
while(invalid);
return array;
}
public static T[] SortMerge<T>(T[] array, Comparison<T> comparison)
{
int len = array.GetLength(0);
T[] copy = new T[len];
array.CopyTo(copy, 0);
Merge<T>(copy, 0, ++len / 2, --len / 2, comparison);
return copy;
}
public static void Merge<T>(T[] array, int start,
int len1, int len2, Comparison<T> comparison)
{
int i1 = start, i2 = start + len1, len = len1 + len2, i = 0, c;
if(len1 > 1) Merge<T>(array, i1, ++len1 / 2, --len1 / 2, comparison);
if(len2 > 1) Merge<T>(array, i2, ++len2 / 2, --len2 / 2, comparison);
T[] copy = new T[len];
len1 += i1; len2 += i2;
while(i1 < len1 && i2 < len2)
{
c = comparison(array[i1], array[i2]);
if(c <= 0) copy[i++] = array[i1++];
if(c >= 0) copy[i++] = array[i2++];
}
while(i1 < len1) copy[i++] = array[i1++];
while(i2 < len2) copy[i++] = array[i2++];
copy.CopyTo(array, start);
}
}
}
Сортує по спаданню.
Якщо потрібно по зростанню, просто міняєте критерій порівняння (11-12 рядки):
float[] sorted = SortMerge<float>(array,
(a, b) => a > b ? 1 : a < b ? -1 : 0);
upd:
А в чому складність переробити існуючий код? По ідеї, достатньо десь замінити < на > чи щось назразок...
Складності немає, просто всім подобається халява.
muhasjo написав:по зростанню це ASC
що таке ASC?
asc - ascending - зростання
desc - descending - спадання
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися