реклама на сайте
подробности

 
 
14 страниц V  « < 5 6 7 8 9 > »   
Reply to this topicStart new topic
> Кризис в самообразовании.
des333
сообщение Mar 27 2017, 17:53
Сообщение #91


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(dxp @ Mar 27 2017, 11:43) *
Именно!
...

+100
Сарказм на отлично! beer.gif
Единственный вопрос -- не лень было столько писать? sm.gif


--------------------
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 27 2017, 18:49
Сообщение #92


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Например, так. Сортировка пары чисел.
Код
void sort(int *x, int *y)
{
  bool a = *x & 1;
  bool b = *y & 1;
  bool c = *x < *y;
  if (a && !b) swap(*x, *y);
  else if (!a && !b && c) swap(*x, *y);
  else if (a && b && !c) swap(*x, *y);
}

Остальное - стандартно. Любой из алгоритмов.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 19:11
Сообщение #93





Guests






Цитата(ViKo @ Mar 27 2017, 21:49) *
Например, так. Сортировка пары чисел.

Не-не.., ну хотелось бы полностью, да и с проверочкой.
Вот, кстати и "чистый" Си, еще один вариант.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Mar 27 2017, 19:47
Сообщение #94


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Зачем городить пузырек или вставки, если есть qsort?
Кстати, тем, кому на мелкоконтроллерах нужно медиану считать, советую взять примеры из Numerical receipes. Сам так фильтрую данные с АЦП по 9 точкам (DMA заполняет буфер, дальше делается memcpy этого буфера и расчет).
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 20:09
Сообщение #95





Guests






Цитата(Эдди @ Mar 27 2017, 22:47) *
Зачем городить пузырек или вставки, если есть qsort?

Задачку студенческую, выполни, плиз - "горный ты наш джигит".
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 27 2017, 20:42
Сообщение #96


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Swup @ Mar 27 2017, 20:49) *
Поясните чем все-таки вот это:
лучше чем вот это?


Потому что условный переход - это угроза промаха кэша.
Ну и контекст опять же надо раскрывать полностью автору, когда речь идет о жестком риалтайме.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Mar 27 2017, 21:22
Сообщение #97


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(TSerg @ Mar 27 2017, 23:09) *
Задачку студенческую, выполни, плиз - "горный ты наш джигит".

Лень. Надергай сам из моего гитхаба ☺
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 21:39
Сообщение #98





Guests






Цитата(Эдди @ Mar 28 2017, 00:22) *
Лень. Надергай сам из моего гитхаба ☺

Ой, тут есть спеши, которые понимают - слился Эдди.

P.S.
Летом собираюсь в вело-поход с приятелями, проедем через КЧ. Примешь? sm.gif
Go to the top of the page
 
+Quote Post
Эдди
сообщение Mar 27 2017, 21:51
Сообщение #99


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



У меня условия не сильно-то позволяют поселить народ. Но если заранее гостиницу забронируете, то выгул (шашлык-машлык, экскурсия на телескоп, экскурсии по окрестностям и, если есть желание, мини-походец в горы) обеспечу.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 22:07
Сообщение #100





Guests






Цитата(Эдди @ Mar 28 2017, 00:51) *
У меня условия не сильно-то позволяют поселить народ. Но если заранее гостиницу забронируете, то выгул (шашлык-машлык, экскурсия на телескоп, экскурсии по окрестностям и, если есть желание, мини-походец в горы) обеспечу.

Ок, договорились.
И, давай заканчиваем тут между-собойские сражения, а также наезды на технологии.
Все мы (здесь) выступаем с ограниченными возможностями - и по статусу, и по разумению.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Mar 28 2017, 03:12
Сообщение #101


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



На чистом "С" задача решается в три шага:
Код
#define swap(x,y) s = x; x = y; y = s;

#define N 19

int main()
{
    int s;
    int i = 0;
    int j = N-1;

// Шаг №1:
    do {
        while ((rnd[i]%2 == 0)&&(i != j)) i = i + 1;
        while ((rnd[j]%2 == 1)&&(j != i)) j = j - 1;
        swap(rnd[i],rnd[j]);
    } while (i != j);

// Шаг №2:
    if (1 < i)
    {
        if (rnd[N-1]%2 == 0)  i = i + 1;

        сортировка_первых_i_значений_rnd[]_по_убыванию
    }

// Шаг №3:
    if (j < N-1)
    {
        сортировка_последних_N-j_значений_rnd[]_по_возрастанию
    }

    return 0;
}
Go to the top of the page
 
+Quote Post
Эдди
сообщение Mar 28 2017, 04:58
Сообщение #102


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(TSerg @ Mar 28 2017, 01:07) *
наезды на технологии

Я на технологии не наезжаю, я лишь критикую всякую дрянь: мастдайку, systemd'изированные дистры линукса, наркоманские ЯП и т.п.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 28 2017, 10:26
Сообщение #103


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Я очень слабый умелец в C#. Вот, сделал. Можно поводить мордой по батарее, если что не так.
CODE

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VS_2017_ArraySort {

public class myComparer : IComparer {

public int Compare(object x, object y ) {
if (x == y) return 0;
else if (((int)x % 2) == 1 && ((int)y % 2) == 0) return 1;
else if (((int)x % 2) == 0 && ((int)y % 2) == 0 && ((int)x < (int)y)) return 1;
else if (((int)x % 2) == 1 && ((int)y % 2) == 1 && ((int)x > (int)y)) return 1;
else return -1;
}
}

class Program {
static void Main(string[] args) {
IComparer myComp = new myComparer();

const int N = 20;
int[] Arr = new int[N];
Random Rnd = new Random();

for (int i=0; i<N; i++) {
Arr[i] = Rnd.Next(0, 99);
}
Console.Write("Исходный массив: ");
foreach (int i in Arr)
Console.Write(i + " ");
Console.WriteLine();

Array.Sort(Arr, myComp);
Console.Write("После сортировки: ");
foreach (int i in Arr)
Console.Write(i + " ");
Console.WriteLine();
}
}
}

Исходный массив: 71 58 3 51 65 96 9 16 57 85 32 75 3 98 51 53 69 15 39 1
После сортировки: 98 96 58 32 16 1 3 3 9 15 39 51 51 53 57 65 69 71 75 85
Go to the top of the page
 
+Quote Post
Swup
сообщение Mar 28 2017, 11:17
Сообщение #104


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Цитата(ViKo @ Mar 28 2017, 14:26) *
Я очень слабый умелец в C#. Вот, сделал. Можно поводить мордой по батарее, если что не так.
Код
Array.Sort(Arr, myComp);


Там ведь используется интроспектная сортировка. Такая комбинация перестановок, сортировок вставкой, кучей и быстрой.
При определенном размере массива будет работать быстрая сортировка, а она делается не на месте. Т.е. в общем случае нарушается условие задачи.

ПС понравилась функция сравнения у вас. Мне и в голову не пришло, что так можно.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 28 2017, 11:26
Сообщение #105


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Swup @ Mar 28 2017, 14:17) *
При определенном размере массива будет работать быстрая сортировка, а она делается не на месте. Т.е. в общем случае нарушается условие задачи.

Почему не на месте? В книге Шилдта есть такой код:
Код
/* Quicksort setup function. */
void quick(char *items, int count)
{
  qs(items, 0, count-1);
}  
/* The Quicksort. */
void qs(char *items, int left, int right)
{
  register int i, j;
  char x, y;
  i = left; j = right;
  x = items[(left+right)/2];
  do {
    while((items[i] < x) && (i < right)) i++;
    while((x < items[j]) && (j > left)) j--;
    if(i <= j) {
      y = items[i];
      items[i] = items[j];
      items[j] = y;
      i++; j--;
    }
  } while(i <= j);
  if(left < j) qs(items, left, j);
  if(i < right) qs(items, i, right);
}
Go to the top of the page
 
+Quote Post

14 страниц V  « < 5 6 7 8 9 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 07:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016