как отсортировать одномерный массивна c#

295
11 марта 2017, 00:31

В одномерном массиве, состоящем из п вещественных элементов, вычислить: произведение положительных элементов массива; сумму элементов массива, расположенных до минимального элемента.
Упорядочить по росту отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace lab3
{
  class Array
  { 
    int d;
    int size1;
    int size2;
    double[] a;
    bool Error;
    int aIndex;

    public void Field()
    {
        Console.WriteLine("Введiть межi масиву: ");
        Console.Write("Перша межа:");
        size1 = Convert.ToInt32(Console.ReadLine());
        Console.Write("Друга межа:");
        size2 = Convert.ToInt32(Console.ReadLine());
        d = size2 - size1 + 1;
    }
    public void ScanArray()
    {
        a = new double[d];
        int x = size1;
        Console.WriteLine("Введiть массив: ");
        for (int i = 0; i < d; i++)
        {
            Console.Write("a[" + x + "]=");
            a[i] = Convert.ToDouble(Console.ReadLine());
            x++;
        }
        foreach (double z in a)
            Console.Write("\t" + z);
        Console.Write("\n");
    }
    public double this[int index]
    {
        get
        {
            if (ok(index))
            {
                Error = false;
                return a[index - size1];
            }
            else
            {
                Error = true;
                return 0;
            }
        }
        set
        {
            if (ok(index))
            {
                a[index] = value;
                Error = false;
            }
            else Error = true;
        }
    }
    private bool ok(int index)
    {
        if (index >= size1 & index <= size2) return true;
        else
            return false;
    }
    public void Dobutok()
    {
        double p = 1;
        for (int i = 0; i < d; i++)
            if (a[i] >= 0.0)
                p = p * a[i];
        Console.WriteLine("Добуток додатних елементiв:" + p);
    }
    public void Summa()
    {
        double max = a[0];
        double min = a[0];
        double S = 0.0;
        for (int i = 0; i < S; i++)
        {
            if (max <= 0)
            {
                max = a[i];
            }
            if (min >= a[i])
            {
                min = a[i];
            }
            if (a[i] > min && a[i] < max)
                S = S + a[i];
        }
        Console.WriteLine("Добуток елементiв мiж максимальним i мiнiмальним елементом:" + d);
    }
    public void Sort()
    {
       ??????????
    }
    public void Scan2()
    {
        Console.Write("\nВведiть номер елемента для виведення: ");
        aIndex = Convert.ToInt32(Console.ReadLine());
    }
    public void Element()
    {
        double x;
        Console.Write("\nВведiть номер елемента для виведення: ");
        aIndex = Convert.ToInt32(Console.ReadLine());
        x = this[aIndex];
        if (this.Error)
            Console.WriteLine("Ви вказали неправильний номер елемента");
        else
            Console.WriteLine("a[" + aIndex + "]=" + x);
    }
    static void Main(string[] args)
    {
        Array a = new Array();
        a.Field();
        a.ScanArray();
        a.Dobutok();
        a.Summa();
        a.Sort();
        a.Element();
        Console.ReadKey();
    }
  }
}
Answer 1

Вот код, решающий Вашу задачу сортировки. Склепал на коленке за 10 минут, просьба не ругаться. Код не претендует на "чистоту", просто делает то, что нужно TC. В переменной sorted отсортированный массив.

UPD: скорректирован код для работы с повторяющимися элементами массива

var a = new double[] { /*тут инициализируй свой массив*/ };
                List<double> lst = a.ToList();
        List<double> chet = lst.Where((x, i) => (i % 2) == 1).ToList();
        chet.Sort();
        List<double> nechet = lst.Where((x, i) => (i % 2) == 0).ToList();
        nechet.Sort();
        List<double> output = new List<double>();
        int chetcounter=0;
        int nechetcounter=0;
        for (int i = 0; i < chet.Count + nechet.Count; i++)
        {

            if ((i % 2) == 0)
            {
                output.Add(nechet[nechetcounter]);
                nechetcounter++;
            }
            else
            {
                output.Add(chet[chetcounter]);
                chetcounter++;
            }
        }
        var sorted = output.ToArray();
Answer 2

Сортировку элементов массива можно спокойно сделать с помощью Linq.Вот пример, если что-то непонятно - спрашивай!

using System; using System.Linq;

class OrderByArray {

static void Main()
{
    //Тут должен быть твой массив
    double[] d = { 2.0, 8.6, 7.4, 12.0, 9.1, -1.14, -3.6,-8.0,-13.7,4.0}; 
    //Тут значения соритируются по возрастанию и выбираются четные числа
    var orderbya = from n in d
                  orderby n 
                  where n % 2 == 0.0
                  select n;

    Console.Write("Четные числа массива: ");
    foreach (var res in orderbya)
    {
            Console.Write("{0:#.##} ", res);
    }
    //Тут значения соритируются по возрастанию и выбираются нечетные числа
    var orderbyd = from n in d
                  orderby n
                   where n % 2 != 0.0
                  select n;
    Console.WriteLine();
    Console.Write("Нечетные числа массива: ");
    foreach (var res in orderbyd)
    {
        Console.Write("{0:#.##} ",res);
    }
    Console.Read();
}

}

READ ALSO
Задержка перехода между страницами в WebBrowser

Задержка перехода между страницами в WebBrowser

Есть некое приложение, которое нажимает кнопки и переходит по этим кнопкам на другие ссылки заполняет input и так далееТак вот есть одна проблема

259
C sharp socket recieve виснет

C sharp socket recieve виснет

Здравствуйте! По какой причине программа может виснуть до получения ответа на string answer = ReceiveDataFromServer();? Те

240
Интеграция Web API и OAuth 2.0 с сайтом, написанным с использованием Razor

Интеграция Web API и OAuth 2.0 с сайтом, написанным с использованием Razor

ЗдравствуйтеЕсть сайт, написанный с использованием синтаксиса Razor

222