- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
#include <iostream>
#include <conio.h>
using namespace std;
void iswap(int &n1, int &n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
int main()
{
int const n = 100;
int a[n];
for ( int i = 0; i < n; ++i ) { a[i] = n - i; cout << a[i] << " "; }
//заполняем массив для наглядности.
//-----------сортировка------------//
//сортирует по-возрастанию. чтобы настроить по-убыванию,
//поменяйте знаки сравнения в строчках, помеченных /*(знак)*/
int sh = 0; //смещение
bool b = false;
for(;;)
{
b = false;
for ( int i = 0; i < n; i++ )
{
if( i * 2 + 2 + sh < n )
{
if( ( a[i + sh] > /*<*/ a[i * 2 + 1 + sh] ) || ( a[i + sh] > /*<*/ a[i * 2 + 2 + sh] ) )
{
if ( a[i * 2 + 1 + sh] < /*>*/ a[i * 2 + 2 + sh] )
{
iswap( a[i + sh], a[i * 2 + 1 + sh] );
b = true;
}
else if ( a[i * 2 + 2 + sh] < /*>*/ a[ i * 2 + 1 + sh])
{
iswap( a[ i + sh], a[i * 2 + 2 + sh]);
b = true;
}
}
}
else if( i * 2 + 1 + sh < n )
{
if( a[i + sh] > /*<*/ a[ i * 2 + 1 + sh] )
{
iswap( a[i + sh], a[i * 2 + 1 + sh] );
b = true;
}
}
}
if (!b) sh++; //смещение увеличивается, когда на текущем этапе
//сортировать больше нечего
if ( sh + 2 == n ) break;
} //конец сортировки
cout << endl << endl;
for ( int i = 0; i < n; ++i ) cout << a[i] << " ";
_getch();
return 0;
}
Запостил как-то на вики как более короткая реализация с++, более понятная и главное - рабочая. Не признали. Сам смотрю - не понимаю че там написано )))
Респект
мешанина символов, равномерно и с низкой плотностью заполняющая экран
затем, собственную iswap было не западло реализовать, а std::swap, значит, полная хрень?
iSwap очень рекламировался Стивом Джобсом
Видно же, что это лаба. А на лабах std::sort_heap, std::swap и прочие стандартные алгоритмы могут быть запрещены.
Жуть.
Эм, так там и mc с его mcedit должны отлично работать... И vi с vim'ом...
Хм. Последний раз когда я такое видел - когда заходил через последовательный порт ;) А в консолях - всегда было все цветное, ну разве что русские буквы не показываются, если не настроены.
> mc не был установлен
А я вот привык к mc'шке. Даже при живых иксах пользуюсь, когда надо порыться в файлах.
А каким менеджером пользуетесь, если не секрет?
В богомерзкой винде иногда eshell выручает
Мне лень копировать и просматривать файлы через консоль, когда в mc это можно сделать быстрее и удобнее. Видимо я хомячок ;)
без вариантов :), ну и обычно ECB открыт, в нем тоже можно. Единственное, что напрядает - в dired нету быстрого архивирования / разархивирования (только по одному файлу), и я каждый раз как сталкиваюсь с тем, что опций архиваторов не помню срочно берусь доделывать, но что-то меня останавливает...
Если эмакса нету, или чужой компутер, на котором эмакс не похож на мой... даже не знаю, наверное использовал бы графический проводник / консоль, по обстоятельствам. Но даже не знаю, давно не случалось.
стоит отметить что из-за него таб стал в этом месте 5 позиций, смещая все остальное внутри себя (ср отступ в строках 35 и 49)
а не то, что ты подумал
элз иф писал так сам для минимизации этого говна хотя бы на 2 строчки )
P.S. Если уж хочется минимизации - можно было воспользоваться стилем K&R.
Предложение было только про уменьшение отступа на 5 пробелов в строках 39-42 и 46-52...
> это ж в стиле кнута только без goto
Кнут смотрит на вас с грустью в глазах.
поменять на это (как пишут все)
else
if (...)
{
}
А зачем вы ее используете? Если уж быть одептом - то до конца.
Как говорится "Tits or GTFO".
вот. обратите внимание, что отступ есть даже если скобки не ставятся.
http://imageshack.us/photo/my-images/171/bscf.jpg/
case 1: if
(таб){
(2 таба)
(таб)}
чтобы было понятно что код в скобках принадлежит только if
else
(tab) if
(tab){
(2tab)//code
(tab)}
так делают все парсеры. напишите else, нажмите enter - каретка перебросится на другую строку + табуляция.
еще вариант елз иф если внутри елза не одна операция а несколько:
else
{
(tab)if
(tab){
(2tab) //code
(tab)}
(tab)if
(tab){
(2tab) //code
(tab)}
}
намереваюсь закончить дискуссию т.к изза смещения комментов вправо мой экран 1024*768 сплющивает текст до нечитабельности.
Правильно делают. Но в то же время если я напишу else if, то они выровняют следующую скобку не по if а по else.
Против второго варианта, где много кода в ветке else ничего не имею.
А по первому - ну приведите хотя бы один пруф, где применено такое форматирование сочетания else и if как здесь, или как в коде который приведен в начале треда. Книгу, ссылку, опенсурс проект, да что угодно...
}
K&R ;)
Я уже как-то писал про свои отступы, обругали. Одни ценители кругом. ^^