22 / 22 / 1
Регистрация: 06.04.2014
Сообщений: 198
1

Уменьшить программу сортировки

27.09.2016, 22:15. Показов 976. Ответов 7
Метки нет (Все метки)

Дана последовательность целых чисел получить упорядоченную по убыванию последовательность состоящую из членов данной последовательности заключенных между первым и последним отрицательными значениями данной последовательности.
Подскажите как можно оптимизировать программу, точнее уменьшить ее? Достаточно много циклов и блоков условий по вставлял, а как уменьшить в голову не приходит..
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace lab2
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] mas = { -1, 44, 5, -8, 5, -5, -3, 7, 95, 5 };
            int i, j, perv=0, posl=0;
            
            Console.Write("Последовательность: \n");
            for (i = 0; i < 10; i++) {
                Console.Write(" " + mas[i]);
            }
 
            for (i = 0; i < 10; i++)
            {
                if (mas[i] < 0)
                {
                    perv = mas[i];
                    break;
                }  
            }
            for (i = 0; i < 10; i++)
            {
                if (mas[i] < 0)       
                    posl = mas[i];
            }
 
            Console.Write("\nУпорядоченная последовательность по убыванию\nзаключенная между первым и последним отрицательными значениями: \n");
            Array.Sort(mas); 
            Array.Reverse(mas);
 
            Console.Write("" + perv);
            for (i = 0; i < 10; i++)
            {
                if (perv == mas[i] || posl == mas[i])
                {}
                else { 
                Console.Write(" " + mas[i]);
                }
            }
            Console.Write(" " + posl);
 
            Console.Write("\nНажмите Enter для выхода...");
            Console.ReadLine();
        }
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2016, 22:15
Ответы с готовыми решениями:

[Сортировка слиянием] Уменьшить количество требуемой памяти для сортировки
Добрый, на момент написания, день всем. Изучаю алгоритмы данных, дошёл до сортировки слиянием...

Разработать программу сортировки одномерного массива методом выборочной сортировки
Разработать программу сортировки одномерного массива методом выборочной сортировки. Помогите...

Написать программу сортировки массива с помощью алгоритма внешней сортировки
1. Дан текстовый файл, в котором записана последовательность целых чисел. Написать программу...

Написать программу сортировки данных в массиве методом быстрой сортировки по возрастанию номеров маршрутов
Описать класс с именем Route, содержащий следующие поля: start (название начального пункта...

7
26 / 27 / 21
Регистрация: 17.05.2016
Сообщений: 94
28.09.2016, 04:17 2
У тебя ошибка была в коде.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
            Console.WriteLine("Последовательность");
            int[] mas = { -1, 44, 5, -8, 5, -5, -3, 7, 95, 5 }; // ответ должен быть -1, -5, 5, -8, 5, 44, -3, 7, 95, 5
            int start = 0, end = 0;
            for (int i = 0; i < mas.Length; i++)
            {
                if (mas[i] < 0)
                {
                    start = i;
                    break;
                }
            }
            for (int i = mas.Length - 1; i > 1; i--)
            {
                if (mas[i] < 0)
                {
                    end = i;
                    break;
                }
            }
            foreach (int n in mas)
                Console.Write(n + " ");
            Console.WriteLine("\n");
            Array.Reverse(mas, start+1, end-1);
            Console.WriteLine("Упорядоченная последовательность по убыванию\nзаключенная между первым и последним отрицательными значениями:");
            foreach (int n in mas)
                Console.Write(n + " ");
            Console.WriteLine();
1
660 / 366 / 204
Регистрация: 02.06.2016
Сообщений: 624
28.09.2016, 05:46 3
mraZzzb, поскольку используется Array.Sort то можно так укоротить:
c linq
C#
1
2
3
4
5
6
7
8
var mas = new int[] { -1, 44, 5, -8, 5, -5, -3, 7, 95, 5 };
var seq = mas.SkipWhile(x => x >= 0).Skip(1)
    .Reverse().SkipWhile(x => x >= 0).Skip(1)
    .OrderByDescending(x => x);
 
Console.WriteLine("mas: " + string.Join(" ", mas));
Console.WriteLine("seq: " + string.Join(" ", seq));
Console.ReadLine();
без linq
C#
1
2
3
4
5
6
7
8
9
10
var mas = new int[]{ -1, 44, 5, -8, 5, -5, -3, 7, 95, 5 };
int index = Array.FindIndex(mas, x => x < 0) + 1;
int length = Array.FindLastIndex(mas, x => x < 0) - index;
var seq = new int[length];
Array.Copy(mas, index, seq, 0, length);
Array.Sort(seq); Array.Reverse(seq);
 
Console.WriteLine("mas: " + string.Join(" ", mas));
Console.WriteLine("seq: " + string.Join(" ", seq));
Console.ReadLine();
1
22 / 22 / 1
Регистрация: 06.04.2014
Сообщений: 198
29.09.2016, 00:20  [ТС] 4
Nomana,
Цитата Сообщение от Nomana Посмотреть сообщение
C#
1
int[] mas = { -1, 44, 5, -8, 5, -5, -3, 7, 95, 5 }; // ответ должен быть -1, -5, 5, -8, 5, 44, -3, 7, 95, 5
Не совсем понимаю, почему должен быть такой ответ. В задании ведь сказано что упорядоченная последовательность должна быть заключена между первым и последним ОТРИЦАТЕЛЬНЫМИ значениями ДАННОЙ последовательности. Либо я не так что-то понимаю..))

Добавлено через 7 часов 52 минуты
Nomana, Хотя я понял, но почему последовательность не отсортирована, которая заключенная между отрицательными значениями

// ответ должен быть -1, -5, 5, -8, 5, 44, -3, 7, 95, 5
0
26 / 27 / 21
Регистрация: 17.05.2016
Сообщений: 94
29.09.2016, 02:37 5
mraZzzb, Ну значит перед Reverse выполнить Sort тех что внутри.
1
22 / 22 / 1
Регистрация: 06.04.2014
Сообщений: 198
29.09.2016, 11:00  [ТС] 6
Nomana, Вот а как правильно ввести параметры для сортировки самой? я пишу так выдает ошибку:
Array.Sort(mas, perv+1, posl-1); либо Array.Sort(mas, perv, posl);
0
26 / 27 / 21
Регистрация: 17.05.2016
Сообщений: 94
30.09.2016, 02:42 7
Лучший ответ Сообщение было отмечено mraZzzb как решение

Решение

mraZzzb,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Console.WriteLine("Последовательность");
        int[] mas = { -1, 44, 5, -8, 5, -5, -3, 7, 95, 5 }; // ответ должен быть -1, 44, 5, 5, -5, -8, -3, 7, 95, 5
        int start = 0, end = 0;
        for (int i = 0; i < mas.Length; i++)
        {
            if (mas[i] < 0)
            {
                start = i;
                break;
            }
        }
        for (int i = mas.Length - 1; i > 1; i--)
        {
            if (mas[i] < 0)
            {
                end = i;
                break;
            }
        }
        foreach (int n in mas)
            Console.Write(n + " ");
        Console.WriteLine("\n");
        Array.Sort(mas, start + 1, end - 1);
        Array.Reverse(mas, start + 1, end - 1);
 
        Console.WriteLine("Упорядоченная последовательность по убыванию\nзаключенная между первым и последним отрицательными значениями:");
        foreach (int n in mas)
            Console.Write(n + " ");
        Console.WriteLine();
1
22 / 22 / 1
Регистрация: 06.04.2014
Сообщений: 198
30.09.2016, 17:57  [ТС] 8
Nomana, вроде так же писал
спасибо!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2016, 17:57

Создать программу реализующую два алгоритма сортировки одномерного массива: методом Шелла и быстрой сортировки
ЗАДАЧА. Создать программу реализующую два алгоритма сортировки одномерного массива: сортировка...

Уменьшить программу
Уменьшите программу пожалуйста. Uses GraphABC; Procedure Gr8(X,Y,R:Integer); Var R3:Integer;...

Как уменьшить программу?
package com.company; import java.util.Scanner; public class Basketball { public static...

Уменьшить программу/снизить количество операторов
В этой программе описан динамический массив, который сортирует числа по возрастанию. Можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.