Записки программиста Программирование и не только

8Окт/120

Гномья сортировка (Gnome sort)

Гномья сортировка основана на технике, используемой обычным голландским садовым гномом (нидерл. tuinkabouter). Это метод, которым садовый гном сортирует линию цветочных горшков. По существу он смотрит на следующий и предыдущий садовые горшки: если они в правильном порядке, он шагает на один горшок вперёд, иначе он меняет их местами и шагает на один горшок назад. Граничные условия: если нет предыдущего горшка, он шагает вперёд; если нет следующего горшка, он закончил.
Дик Грун

Мой вариант реализации:

void gnom_sort(int[] mas) {
	int p = 2;
	int i = 1;
	for (; i < mas.length; ) {
		if (mas[i - 1] <= mas[i]) {
			p++;
			i = p;
		} else {
			int a = mas[i];
			mas[i] = mas[i - 1];
			mas[i - 1] = a;
			i--;
			if (i == 0) {
				p++;
				i = p;
			}
		}
	}
}
27Сен/120

Задачи по Java

http://codingbat.com/java
На английском. Сразу запускаются и проверяются.

26Сен/120

Сертификация Java

А вот тут можно попробовать пройти тестовый экзамен на сертификат http://www.certpal.com
Правда, он старенький, кажется.

25Сен/122

[Java] Классы. static и abstract

static
Иногда требуется создать метод, который можно было бы использовать вне какого-либо объекта.
Статические методы могут непосредственно обращаться только к другим статическим методам, в них ни в каком виде не допускается использование ссылок this и super.
Внутри статических методов недопустимы ссылки на не статические переменные объекта.
Переменные также могут иметь тип static, они подобны глобальным переменным, то есть доступны из любого места кода.

class Static {
	static int a = 3;
	static int b = 4;
	static void method(int x) {
		System.out.println("x = " + x);
		System.out.println("a = " + a);
		System.out.println("b = " + b); 
	}
}

Вызываем без создания экземпляра класса

Static.method(42);
System.out.println("StaticClass.b = " + Static.b);

Результат запуска этой программы

x = 42 
a = 3 
b = 4
StaticClass.b = 4

abstract
Бывают ситуации, когда нужно определить класс, в котором задана структура какой-либо абстракции, но полная реализация всех методов отсутствует. В таких случаях вы можете с помощью модификатора типа abstract объявить, что некоторые из методов обязательно должны быть замещены в подклассах. Любой класс, содержащий методы abstract, также должен быть объявлен, как abstract. Поскольку у таких классов отсутствует полная реализация, их представителей нельзя создавать с помощью оператора new. Кроме того, нельзя объявлять абстрактными конструкторы и статические методы. Любой подкласс абстрактного класса либо обязан предоставить реализацию всех абстрактных методов своего родителя, либо сам должен быть объявлен абстрактным.

abstract class A {
	abstract void callme();
	void metod() {
		System.out.println("Inside A's metoo method"); 
	} 
} 

class B extends A {
	void callme() {
		System.out.println("Inside B's callme method");
	} 
} 

class Abstract {
	public static void main(String args[]) {
		B b = new B(); 
		b.callme();
		b.metoo();
	} 
}
Метки записи: , 2 Комментарии
25Сен/120

[Java] Классы. Перегрузка, this, наследование, переопределение

  • Перегрузка методов
  • Оператор this
  • Наследование
  • Переопределение методов (override)
  • Всякое
  • Непонятные возможности
15Сен/126

[Java] Сортировка пузырьком

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

Что такое сортировка пузырьком?
Это когда последовательно берется каждый элемент массива и "всплывается" на своё место пока не встретит более "легкий" элемент или конец массива.

Что для этого надо?
Для начала, нужно проходить по всему массиву:

for(int i = 0; i < arr.length; i++)

Ничего сложного, да?
Теперь надо каждый найденный элемент поднимать вверх.

for(int i = 1; i < arr.length; i++)	//внимание на начальный номер
					//связано это с тем, что сравниваем с "предыдущим" пузырьком
					//но индекса "-1" в массиве нет
{
	for(int j = i; j >= 1; j--)
	{
		//меняем элементы местами
		int a = arr[j];
		arr[j] = arr[j-1];
		arr[j-1] = a;
	}
}

Элементы "всплывают". Но чего-то не хватает... Точно, проверки - нужно ли вообще всплывать!

for(int i = 1; i < arr.length; i++)
{
	for(int j = i; (j >= 1) && (arr[j] < arr[j - 1]); j--)
	//ПОКА (arr[j] меньше arr[j-1]) И (в массиве еще есть элементы (j >= 0))
        {
                int a = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = a;
	}
}

Вот так вот.
Массив для проверки можно создать так:

int arr[] = {4, 7, 2, 9, 0, 1, 9, 12 ,56 ,78};

Но мы жешь программисты!
Так что воспользуемся готовой функцией random!

int arr[] = new inr[10];
for(int i = 0; i < arr.length; i++)
	arr[i] = Math.random();

В качестве домашнего задания попробуйте реализовать сортировку по убыванию.
Ну и на сложное - Гномью сортировку (gnome sort)

12Сен/120

[Java] Урок 5. Классы. Введение

  • Схема класса
  • Оператор new
  • Методы
  • Вызов метода
  • Конструкторы
  • 11Сен/120

    [Java] Урок 4. Циклы

    • while
    • do-while
    • for
    • Немного дзена
    • Оператор запятая
    • Оператор continue
    • Оператор return
    10Сен/120

    [Java] Урок 3. Условные операторы

    • if-else
    • break
    • switch
    7Сен/120

    [Java] Шпаргалка 2. Операторы

    • Арифметические операторы
    • Целочисленные битовые операторы
    • Булевы логические операторы
    • Операторы отношений
    • Тернарный оператор if-then-else
    • Приоритет операций