Тема: Сортування злиттям по спаданню
Який код? Всюди по зростанню(
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, 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
Для відправлення відповіді ви повинні увійти або зареєструватися