Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка методом Шейкера 
:(
    Опции темы
sasa
Дата 4.11.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.11.2006

Репутация: нет
Всего: нет



Привет всем, у меня вопрос по программе C#. Короче кто - то знает метод Шейкера(он заключается в следующем: проходишь одномерный массив и сразу находишь минимальный и максимальный элементы, затем помещаем мин. элемент  в начало массива, а макс. в конец массива и так далее.)Тавк вот в чём моя проблема? есть программа, но я не знаю как из двумерного массива, который выводится у меня, сделать одномерный и потом провести сортировку методом Шейкера.Помогите пожалуйста!Я должен сдать работу в понедельник!Please....

Код
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;


namespace Laba1
{
    class Program
    {
        static void Main(string[] args)
        {
            string tmp = "";
            int[] tab = new int[120];
            int ti = 0, w = 0;

            //-------------------- FILE
            StreamReader sr = new StreamReader("d:\\a.txt");
            string fromFile = sr.ReadToEnd();

            for (w = 0; w < fromFile.Length; w++)
            {
                if (fromFile[w] != ' ')
                    tmp = string.Concat(tmp, fromFile[w]);
                else
                {
                    tab[ti++] = int.Parse(tmp);
                    tmp = "";
                }
            }

            //----------------------- vivod znacenii iz faila
            int n, m, i = 0, j = 0;
            Console.WriteLine("VVEDITE N");
            n = int.Parse(Console.ReadLine());
            Console.WriteLine("VVEDITE M");
            m = int.Parse(Console.ReadLine());
            int[,] mas = new int[n, m];


            for (int t = 0; t < ti; t++)
            {
                if (t >= n * m)
                    break;
                mas[i, j] = tab[t];


                if (((t + 1) % m) == 0)
                {
                    i++;
                    j = 0;

                }
                else
                {
                    j++;
                }

            }

            Console.WriteLine("vivod massiva iz faila:");
            Console.WriteLine("\n");
            for (i = 0; i < mas.GetLength(0); i++)
            {
                for (j = 0; j < mas.GetLength(1); j++)
                {
                    Console.Write("\t" + mas[i, j]);
                }
                Console.WriteLine();
            }


            //----------------- Summa po stolbthy
            int[] summa = new int[n];
            for (i = 0; i < mas.GetLength(0); i++)
                for (j = 0; j < mas.GetLength(1); j++)
                    summa[i] += mas[i, j];

            Console.Write("\t-------------------------\nSUM:");

            for (j = 0; j < mas.GetLength(0); j++)
            {
                Console.Write("\t" + summa[j]);
            }

            //--------------------- summa po massivu
            long sum = 0;
            foreach (int item in mas)
            {
                sum += item;
            }
            Console.Write("\n\n");
            Console.WriteLine("sum vseh elementov = {0}", sum);
            Console.WriteLine();


            //-------------------SORTIROVKA SHAKER---------------------
            //Console.WriteLine("\n\n");
            //Console.WriteLine("Sortirovka SHAKER: ");
            //int k = 0;
            //for (k = 0; k < n / 2; k++)
            //{
              //  for (i < k; i < n - k; i++)
                //{
                  //  for (j < k; j < n - k; j++)
                   // {
                     //   if (mas[i,j] > max)
                       // {
                       //     max = mas[i,j];
                         //   imax = i;
                      //  }
                       // if (mas[i,j] < min)
                       // {
                          //  min = mas[i,j];
                         //   imin = i;
                      //  }
                  //  }
              //  }
         //       mas[imin] = mas[k];
         //       mas[k] = imin;
         //       mas[imax] = mas[k];
         //       mas[k] = imax;
        //    } 
        //    Console.WriteLine("\n\n");
        //    Console.WriteLine("Otsortirovannii massiv: ");
        //    for (i = 0; i < mas.GetLength(0); i++)
          //  {
          //      for (j = 0; j < mas.GetLength(1); j++)
           //     {
             //       Console.WriteLine("\n\n");
              //      Console.Write("{0}\t", mas[i,j]);
//
  //              }
    //        }
      //      Console.Read();
//
  //          }
        }
//    }


PM MAIL   Вверх
mr.DUDA
Дата 4.11.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232




M
mr.DUDA
sasa, на будущее: одна тема - один вопрос. Вынес как отдельную тему.



--------------------
user posted image
PM MAIL WWW   Вверх
archimed7592
Дата 5.11.2006, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



sasa, у тебя он изначально одномерный (tab). или я чего-то недопонял? в твоей проге делается жалкая попытка отсортировать 2-умерный массив smile как это я себе представляю с трудом smile попробуй сортировать tab, а потом второй раз переводить его в 2-умерный массив и выводить. правда сортировочко тож хромает...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
archimed7592
Дата 5.11.2006, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



хз...наверное, что-то вроде этого:
Код
using System;
using System.IO;


namespace Laba1
{
    class Program
    {
        static void Main(string[] args)
        {
            //-------------------- FILE
            string fromFile;                                            // added

            using (StreamReader sr = new StreamReader("t:\\a.txt"))     // corrected
                fromFile = sr.ReadToEnd();

            string[] tab_s = fromFile.Split(new char[] { ' ' });        // added
            int[] tab = new int[tab_s.Length];                          // added
            for (int i = 0; i < tab_s.Length; ++i)                      // added
                tab[i] = int.Parse(tab_s[i]);                           // added

            //----------------------- vivod znacenii iz faila
            int n, m;                                                   // removed i,j
            Console.WriteLine("VVEDITE N");
            n = int.Parse(Console.ReadLine());
            Console.WriteLine("VVEDITE M");
            m = int.Parse(Console.ReadLine());
            int[,] mas = new int[n, m];


            for (int i = 0, t = 0; i < n && t < tab.Length; ++i)        // added
                for (int j = 0; j < m && t < tab.Length; ++j, ++t)      // added
                    mas[i, j] = tab[t];                                 // added

            Console.WriteLine("vivod massiva iz faila:");
            Console.WriteLine("\n");
            for (int i = 0; i < n; ++i)                                 // corrected
            {
                for (int j = 0; j < m; ++j)                             // corrected
                    Console.Write("\t{0}", mas[i, j]);                  // corrected
                Console.WriteLine();
            }


            //----------------- Summa po stolbthy
            int[] summa = new int[m];
            for (int j = 0; j < m; ++j)                                 // corrected
            {
                summa[j] = 0;                                           // added
                for (int i = 0; i < n; ++i)                             // corrected
                    summa[j] += mas[i, j];
            }

            Console.Write("\t------------------------------------\nSUM:");

            for (int j = 0; j < m; ++j)                                 // corrected
                Console.Write("\t{0}", summa[j]);                       // corrected

            //--------------------- summa po massivu
            long sum = 0;
            foreach (int item in mas)
                sum += item;

            Console.Write("\n\n");
            Console.WriteLine("sum vseh elementov = {0}", sum);
            Console.WriteLine();

            //-------------------SORTIROVKA SHAKER---------------------
            Console.WriteLine("\n\n");
            Console.WriteLine("Sortirovka SHAKER: ");
            for (int k = 0; k < tab.Length / 2; k++)                    // corrected
            {
                int min_val = int.MaxValue;                             // added
                int max_val = int.MinValue;                             // added
                int min_ind = k;                                        // added
                int max_ind = tab.Length - k - 1;                       // added
                for (int i = k; i < tab.Length - k; i++)                // corrected
                {
                    if (tab[i] > max_val)
                    {
                        max_val = tab[i];
                        max_ind = i;
                    }
                    if (tab[i] < min_val)
                    {
                        min_val = tab[i];
                        min_ind = i;
                    }
                }
                if (min_ind != k)                                       // corrected
                {
                    int temp = tab[min_ind];                            // corrected
                    tab[min_ind] = tab[k];                              // corrected
                    tab[k] = temp;                                      // corrected
                }
                if (max_ind != tab.Length - k - 1)                      // corrected
                {
                    int temp = tab[max_ind];                            // corrected
                    tab[max_ind] = tab[tab.Length - k - 1];             // corrected
                    tab[tab.Length - k - 1] = temp;                     // corrected
                }
            }
            Console.WriteLine("\n\n");
            Console.WriteLine("Otsortirovannii massiv: ");
 
            for (int i = 0, t = 0; i < n && t < tab.Length; ++i)        // added
                for (int j = 0; j < m && t < tab.Length; ++j, ++t)      // added
                    mas[i, j] = tab[t];                                 // added

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                    Console.Write("\t{0}", mas[i, j]);                  // corrected
                Console.WriteLine();
            }
            Console.ReadKey();                                          // corrected
        }
    }
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Sartorius
Дата 5.11.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



sasa,  насколько я помню шэйкерная сортировка - это последовательное выполнение одной итерации пузырьковой при смене направлений, а не измененная вставка, которую ты написал. В шэйкере действительно есть смысл при сортировке массива, близкого к упорядоченному.
PM MAIL ICQ   Вверх
sasa
Дата 6.11.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.11.2006

Репутация: нет
Всего: нет



Я только не могу понять, почему она у меня показывает какую-то ошибку?

Добавлено @ 12:02 
Или когда я запускаю, у меня не отображаются запуск других методов, например VVedite N и M

Добавлено @ 12:09 
Нет я читаю из файла двумерный массив, потом надо все эти элементы расположить в виде одномерного массива в одну строчку и поставить min i max на концах одномерного массива, и так для всех. Пожалуйста, помогите, я лабу должен сдать в 14.00!
PM MAIL   Вверх
sasa
Дата 6.11.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.11.2006

Репутация: нет
Всего: нет



Ребята всё не надо, спасибо огромное, всё пошло! Моё спасибо не имеет границ!Удачи вам!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0725 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.