Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts

Tuesday, December 15, 2009

Using GSON to parse Yelp JSON result

This is a very basic example about using GSON to parse JSON result from Yelp. These few lines of codes will do the trick:

Sunday, December 13, 2009

Getting current GPS coordinates in Android

All you need are these few lines of codes: Also don't forget to add this permission in the manifest file:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

Friday, November 27, 2009

Nonblocking mechanism for Android GUI

Do you realize that fetching data from the web, for example a GET request, may actually block the GUI and then creates an error? I experienced that and would want to share my thoughts on resolving it. I have not implemented a sound solution but these are the things I have in my mind. There are two components to implement in the code:
1. Thread
2. Handler

Let's see if this works :)

Thursday, November 19, 2009

Distinct intersecting values of two arrays

I have written two different methods that gives the same output. The output is a list of distinct intersecting values of two arrays. I am amazed with the different amount of time taken to solve this problem. It would be something interesting to investigate. Here are the suggested solutions:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class ArraysIntersection {

private void findIntersectionMethod1(int[] a, int[] b){
long start = System.nanoTime();
int indexA = 0;
int indexB = 0;
ArrayList unique = new ArrayList();
while (indexA < a.length && indexB < b.length) {
if (a[indexA] == b[indexB]) {
if (!unique.contains(a[indexA])) {
unique.add(a[indexA]);
}
indexA++;
indexB++;
} else if (a[indexA] < b[indexB]) {
indexA++;
} else {
indexB++;
}
}
long elapsed = (System.nanoTime() - start);
System.out.println("Elapsed time (findIntersectionMethod1): " + elapsed + "ns");
System.out.println("Intersection of elements: " + unique);
}

private void findIntersectionMethod2(int[] arr1, int[] arr2){
long start = System.nanoTime();
ArrayList unique = new ArrayList();
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr2.length; j++) {
if (arr1[i] == arr2[j]) {
if (!unique.contains(arr1[i])) {
unique.add(arr1[i]);
}
}
}
}
long elapsed = (System.nanoTime() - start);
System.out.println("Elapsed time (findIntersectionMethod2): " + elapsed + "ns");
System.out.println("Intersection of elements: " + unique);
}

private void findIntersectionMethod3(int[] a, int[] b){
long start = System.nanoTime();
Set unique = new HashSet();
int indexA = 0;
int indexB = 0;
while (indexA < a.length && indexB < b.length) {
if (a[indexA] == b[indexB]) {
unique.add(a[indexA]);
indexA++;
indexB++;
} else if (a[indexA] < b[indexB]) {
indexA++;
} else {
indexB++;
}
}

long elapsed = (System.nanoTime() - start);
System.out.println("Elapsed time (findIntersectionMethod3): " + elapsed + "ns");
System.out.println("Intersection of elements: " + unique);
}

public static void main(String[] args) {

int a[]={1, 1, 2, 4, 4, 7, 8, 8, 9, 14, 14, 20, 20, 20};
int b[]={1, 1, 1, 2, 2, 8, 8, 20};

ArraysIntersection arrIntersect = new ArraysIntersection();
arrIntersect.findIntersectionMethod1(a, b);
arrIntersect.findIntersectionMethod2(a, b);
arrIntersect.findIntersectionMethod3(a, b);
}
}

The output of these methods are as below (I'm telling you, you'll be amazed looking at the time taken for each method):
Elapsed time (findIntersectionMethod1): 455000ns
Intersection of elements: [1, 2, 8, 20]
Elapsed time (findIntersectionMethod2): 15000ns
Intersection of elements: [1, 2, 8, 20]
Elapsed time (findIntersectionMethod3): 65000ns
Intersection of elements: [2, 8, 1, 20]

I'm sure there are much better solutions to solve this interesting problem that I have not thought of.

Wednesday, November 18, 2009

Quizzie with improved user interface

This is Quizzie v1.1 with much better user interface. I hope you enjoy watching this video. Quizzie v1.0 is available here.

Friday, November 13, 2009

Removing status and title bars in an Android app

Here are a few options to display the status and title bars in your Android app. The first image shown below is exactly the output you are getting if you do not do any configurations.
To get this output, add this line in the onCreate method:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
To get this output, add this line in the onCreate method:
requestWindowFeature(Window.FEATURE_NO_TITLE);
To get this output, add these two lines in the onCreate method:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

Monday, November 9, 2009

Extracting unique element(s) from a sorted list

PROBLEM: you have a list of sorted elements. All elements are sorted (it could be in ascending order or descending order). You are printing out the unique elements in the sorted list.
COMPLEXITY: O(n)

public class UniqueNumbers {
public static void main(String[] args) {
int a[]={1, 1, 1, 2, 4, 4, 7, 8, 9, 14, 14, 20, 20, 20};
//int a[]={1};
//int a[]={2, 2, 4, 5};
//int a[]={1, 1, 1, 2, 2, 8};
//int a[]={1, 1, 1};
int uniq = a[a.length-1];
boolean numberExists = false;
for (int i = 0; i < a.length; i++) {
if (a[i] == uniq) {
if (!numberExists) {
System.out.println("Position: " + i + " Unique Element => " + a[i]);
numberExists = true;
}
}
else {
System.out.println("Position: " + i + " Unique Element => " + a[i]);
uniq = a[i];
numberExists = true;
}
}
}
}
The output is shown below:

{1, 1, 1, 2, 4, 4, 7, 8, 9, 14, 14, 20, 20, 20}
Position: 0 Unique Element => 1
Position: 3 Unique Element => 2
Position: 4 Unique Element => 4
Position: 6 Unique Element => 7
Position: 7 Unique Element => 8
Position: 8 Unique Element => 9
Position: 9 Unique Element => 14
Position: 11 Unique Element => 20

{1}
Position: 0 Unique Element => 1

{2, 2, 4, 5}
Position: 0 Unique Element => 2
Position: 2 Unique Element => 4
Position: 3 Unique Element => 5

{1, 1, 1, 2, 2, 8}
Position: 0 Unique Element => 1
Position: 3 Unique Element => 2
Position: 5 Unique Element => 8

{1, 1, 1}
Position: 0 Unique Element => 1
Update: my solution is not that elegant after all. I had the opportunity to discuss the algorithm with Mark and he has a much better way to solve this problem. Thank you, Mark (you know who you are :D).

public static void main(String[] args) {
int a[]={1, 1, 1, 2, 4, 4, 7, 8, 9, 14, 14, 20, 20, 20};
//int a[]={1};
//int a[]={2, 2, 4, 5};
//int a[]={1, 1, 1, 2, 2, 8};
//int a[]={1, 1, 1};
int uniq = a[0];
System.out.println("Position: " + 0 + " Unique Element => " + uniq);
for (int i = 1; i < a.length; i++) {
if (a[i] != uniq) {
System.out.println("Position: " + i + " Unique Element => " + a[i]);
uniq = a[i];
}
}
}

Saturday, November 7, 2009

Setting defined colors for your Android UI components

I don't think the Android SDK manual is helpful enough when it comes to setting the colors that you defined in the XML file (in my example, res -> values -> color.xml). There is actually a workaround instead of following rigidly the guidelines to use the setTextColor(int color) method.

I believe you must have read the guidelines how to set the color of TextView from this URL and this URL and do not really feel like constructing another XML file as mentioned in the manual.

I also believe that you must have used this approach to set the color from the Java code,
btnInstance.setTextColor(R.color.YOUR_DEFINED_COLOR);
simply because the setTextColor asks for an Integer as the parameter but you don't see the changes taking place.

SOLUTION: this is THE workaround to set the color of your UI components from the codes.
btnInstance.setTextColor(getResources().getColor(R.color.YOUR_DEFINED_COLOR));

The 12 balls puzzle

A solution to solve the 12 ball puzzle.
Fact: you know that 11 balls are equally weighted and 1 of them is not
Constraint: you can only use the weighing machine at most 3 times to determine the heaviest ball

import java.util.Random;

public class TheHeaviestBall {

private int count = 0;
private int indexHeaviestBall = 0;
private Random myRand = new Random();
private int[] balls = {1,1,1,1,1,1,1,1,1,1,1,1};
private int[] arrangeBalls(){
balls[myRand.nextInt(12)] = 2;
for (int aBall : balls) {
System.out.print(aBall + " ");
}
return balls;
}

public void weighingCount(){
count++;
if (count > 3) {
System.out.println("Your algorithm fails");
}
}

public int theBALL(){
int myBalls[] = arrangeBalls();
weighingCount();
if ((myBalls[0]+myBalls[1]+myBalls[2]+myBalls[3]) > (myBalls[4]+myBalls[5]+myBalls[6]+myBalls[7])) {
weighingCount();
if ((myBalls[0]+myBalls[1]) > (myBalls[2]+myBalls[3])) {
weighingCount();
if (myBalls[0] > myBalls[1]) {
indexHeaviestBall = 0;
return myBalls[0];
} else {
indexHeaviestBall = 1;
return myBalls[1];
}
} else {
weighingCount();
if (myBalls[2] > myBalls[3]) {
indexHeaviestBall = 2;
return myBalls[2];
} else {
indexHeaviestBall = 3;
return myBalls[3];
}
}
}
else if ((myBalls[4]+myBalls[5]+myBalls[6]+myBalls[7]) > (myBalls[0]+myBalls[1]+myBalls[2]+myBalls[3])) {
weighingCount();
if ((myBalls[4]+myBalls[5]) > (myBalls[6]+myBalls[7])) {
weighingCount();
if (myBalls[4] > myBalls[5]) {
indexHeaviestBall = 4;
return myBalls[4];
} else {
indexHeaviestBall = 5;
return myBalls[5];
}
} else {
weighingCount();
if (myBalls[6] > myBalls[7]) {
indexHeaviestBall = 6;
return myBalls[6];
} else {
indexHeaviestBall = 7;
return myBalls[7];
}
}
}
else {
weighingCount();
if ((myBalls[8]+myBalls[9]) > (myBalls[10]+myBalls[11])) {
weighingCount();
if (myBalls[8] > myBalls[9]) {
indexHeaviestBall = 8;
return myBalls[8];
} else {
indexHeaviestBall = 9;
return myBalls[9];
}
} else {
weighingCount();
if (myBalls[10] > myBalls[11]) {
indexHeaviestBall = 10;
return myBalls[10];
} else {
indexHeaviestBall = 11;
return myBalls[11];
}
}
}
}

public static void getMyHeaviestBall(){
TheHeaviestBall hb = new TheHeaviestBall();
//Algorithm validation
if (hb.count > 3) {
System.out.println("You can do better");
} else {
System.out.println("\nThe heaviest ball [ " + hb.theBALL() + " ] is the " + (hb.indexHeaviestBall + 1) + "th ball from the left");
}
}

public static void main(String[] args) {
getMyHeaviestBall();
}
}
Update: Click here to view the solution to solve the 8 balls puzzle

Friday, November 6, 2009

The 8 balls puzzle

Here is an interesting puzzle about selecting the heaviest ball among 7 other equally weighted balls. For example a collection of the 8 balls would look like this [2,1,1,1,1,1,1,1].

The goal is to choose the heaviest ball by performing only two weighings.
Fact: You know that all 7 other balls are equally weighted but you could not figure out the heaviest ball.
Solution: In order to do so, you are using the weighing machine but as a challenge you can only use the weighing machine at most twice

import java.util.Random;

public class TheHeaviestBall {

private int count = 0;
private int indexHeaviestBall = 0;
private Random myRand = new Random();
private int[] balls = {1,1,1,1,1,1,1,1};
private int[] arrangeBalls(){
balls[myRand.nextInt(8)] = 2;
for (int aBall : balls) {
System.out.print(aBall + " ");
}
return balls;
}

public void weighingCount(){
count++;
if (count > 2) {
System.out.println("Your algorithm fails");
}
}

public int theBALL(){
int myBalls[] = arrangeBalls();
weighingCount();
if ((myBalls[0]+myBalls[1]+myBalls[2]) > (myBalls[3]+myBalls[4]+myBalls[5])) {
weighingCount();
if (myBalls[1] == myBalls[2]) {
indexHeaviestBall = 0;
return myBalls[0];
} else {
if (myBalls[1] >= myBalls[2]) {
indexHeaviestBall = 1;
return myBalls[1];
} else {
indexHeaviestBall = 2;
return myBalls[2];
}
}
}
else if ((myBalls[3]+myBalls[4]+myBalls[5]) > (myBalls[0]+myBalls[1]+myBalls[2])) {
weighingCount();
if (myBalls[4] == myBalls[5]) {
return myBalls[3];
} else {
if (myBalls[4] >= myBalls[5]) {
indexHeaviestBall = 4;
return myBalls[4];
}
else {
indexHeaviestBall = 5;
return myBalls[5];
}
}
}
else {
weighingCount();
if (myBalls[6] >= myBalls[7]) {
indexHeaviestBall = 6;
return myBalls[6];
}
else {
indexHeaviestBall = 7;
return myBalls[7];
}
}
}

public static void getMyHeaviestBall(){
TheHeaviestBall hb = new TheHeaviestBall();
//Algorithm validation
if (hb.count > 2) {
System.out.println("You can do better");
} else {
System.out.println("\nThe heaviest ball [ " + hb.theBALL() + " ] is the " + (hb.indexHeaviestBall + 1) + "th ball from the left");
}
}

public static void main(String[] args) {
getMyHeaviestBall();
}
}
Update: Click here to view the solution to solve the 12 balls puzzle

Quizzie - my first Android application

Behold ... my very first fully functional Android application. The development process is very short. I always have this philosophy that if you know what you want to do and achieve, you will know what to do and how to achieve it. Therefore the design process is shortened.

This game is all about Mathematics. Seemingly simple mathematical expressions but good enough to induce carelessness to choose the wrong answer.

Monday, November 2, 2009

Sound Management in Android Application

This is a suggestion from myself about adjusting the volume of the sound effects or background music in your Android Activity(ies). The sample code is as below:onKeyDown method is called when a button is pressed and onKeyUp is called when the button is released. In this example specifically, we are raising and lowering the volumes when the volume keys are pressed and retain the values when the buttons are released.

Adding Vibration to your Android Application

Below are the simple steps to enable the vibration feature for your Android application. There are two things you will need to take care of - the AndroidManifest.xml file and the Vibrate class.

[1] Add this line in manifest file:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
. . .
. . .
. . .
<uses-permission android:name="android.permission.VIBRATE">permission>
</manifest>

[2] Add these two lines in your class definition.

Tuesday, October 27, 2009

Another Web Journal Success (my personal minor achievement)

Web Journal is ranked top in Korean language for blog search. I can understand some Korean words and if I'm not mistaken, the Korean words in the header area literally means "Blog".

CustomStack upgrades

My CustomStack now comes with several other new features. I can actually check if an Object exists in the Stack. Once the Object is found, a boolean true is returned. In addition to that, I've also added a method to retrieve an element with a given 0-based index number. I call it elementAt and it has a similar functionality of get. To the readers who are accustomed to the methods of a Stack, I have also added the method peek. Basically, it's a method to retrieve the element at the top of the Stack. The method search returns the 0-based index number of the first found element and -1 is returned if the element is not found. Here are the summary of methods of the newly improved CustomStack:
contains(Object input)
elementAt(int index)
peek()
search(Object input)

Below is the code snippet.

public boolean contains(Object input){
boolean found = false;
if(empty()){
throw new RuntimeException( "Stack is already empty. No elements to check." );
}
for(int i = 0; i<size(); i++) {
if (stackElements[i].hashCode() == input.hashCode()) {
found = true;
break;
}
}
return found;
}

public Object elementAt(int index){
return get(index);
}

public Object peek(){
return top();
}

public int search(Object input){
int index = -1;
if(empty()){
throw new RuntimeException( "Stack is already empty. No elements to search." );
}
for(int i = 0; i<size(); i++) {
if (stackElements[i].hashCode() == input.hashCode()) {
index = i;
break;
}
}
return index;
}

Click here to view the previous code of CustomStack.

Monday, October 26, 2009

Stack Implementation in Java

Below is my code to implement Stack from ground-up. I tried (in a very short time) to emulate the behavior of Stack in the Java Util package. The methods I have written are:
size()
get(int index)
empty()
clear()
pop()
push(Object input)
bottom()
top()


I call my Stack implementation as CustomStack as it may evolve over time. I have also provided some test cases to validate that the implementation actually works. The sample output is shown below the codes.

import java.lang.reflect.Array;

public class CustomStack {

private Object[] stackElements;
private int stackIndex = -1;
private int stackSize = 0;
private static final int INIT_SIZE = 3;
private boolean stackSizeGiven = false;
private int sizeHolder = 0;

public CustomStack(){
stackElements = new Object[ INIT_SIZE ];
stackSizeGiven = false;
}

public CustomStack(int inputSize){
sizeHolder = inputSize;
stackElements = new Object[ sizeHolder ];
stackSizeGiven = true;
}

public int size(){
return stackSize;
}

public Object get(int index){
if ((index < 0) || (index > (stackSize))) {
throw new RuntimeException("Index out of bound. Supplied " + index);
}
return stackElements[ index ];
}

public boolean empty() {
return stackIndex == -1;
}

public void clear() {
if (stackSizeGiven) {
stackElements = new Object[ sizeHolder ];
} else {
stackElements = new Object[ INIT_SIZE ];
}
stackIndex = -1;
stackSize = 0;
}

public void pop() {
if(empty()){
throw new RuntimeException( "Stack is already empty. No elements to pop." );
}
stackIndex--;
stackSize--;
}

public void push(Object input) {
if( stackIndex + 1 == stackElements.length ) {
int arrayLength = Array.getLength(stackElements);
Object [] newArray = (Object[]) Array.newInstance(stackElements.getClass().getComponentType(), (arrayLength + arrayLength ));
System.arraycopy(stackElements, 0, newArray, 0, arrayLength);
stackElements = newArray;
}
stackElements[ ++stackIndex ] = input;
stackSize++;
}

public Object bottom(){
if(empty())
throw new RuntimeException( "Stack is already empty. No elements at bottom." );
return stackElements[ 0 ];
}

public Object top() {
if(empty())
throw new RuntimeException( "Stack is already empty. No elements at top." );
return stackElements[ stackIndex ];
}

public static void testCases(){
CustomStack aStack = new CustomStack();
System.out.println("Stack is empty: " + aStack.empty());
aStack.push("Nicholas Key");
aStack.push(3.142);
aStack.push(false);
// Prints false
System.out.println("Element at top of Stack: " + aStack.top());
System.out.println("Size of current Stack: " + aStack.size());

aStack.push("Java Developer");
aStack.push("Android App Developer");
// Prints Android App Developer
System.out.println("Element at top of Stack: " + aStack.top());

aStack.push("Web App Developer");
aStack.push("Blogger");
aStack.push(2009);
// Prints 2009
System.out.println("Element at top of Stack: " + aStack.top());
System.out.println("Size of current Stack: " + aStack.size());

// Prints Stack elements
for (int i= 0; i< aStack.size(); i++) {
System.out.println("Index " + i + ": " + aStack.get(i));
}

// Pops 2009
aStack.pop();
// Prints Blogger
System.out.println("Element at top of Stack: " + aStack.top());

// Pops Blogger
aStack.pop();
// Prints Web App Developer
System.out.println("Element at top of Stack: " + aStack.top());

// Prints Stack elements
for (int i= 0; i< aStack.size(); i++) {
System.out.println("Index " + i + ": " + aStack.get(i));
}

System.out.println("Element at bottom of Stack: " + aStack.bottom());

// Pops out all Stack elements
aStack.clear();
System.out.println("Stack is empty: " + aStack.empty());

System.out.println(aStack.get(1));

System.out.println(aStack.get(aStack.size() + 300));
}

public static void main(String[] args) {
testCases();
}
}

Stack is empty: true
Element at top of Stack: false
Size of current Stack: 3
Element at top of Stack: Android App Developer
Element at top of Stack: 2009
Size of current Stack: 8
Index 0: Nicholas Key
Index 1: 3.142
Index 2: false
Index 3: Java Developer
Index 4: Android App Developer
Index 5: Web App Developer
Index 6: Blogger
Index 7: 2009
Element at top of Stack: Blogger
Element at top of Stack: Web App Developer
Index 0: Nicholas Key
Index 1: 3.142
Index 2: false
Index 3: Java Developer
Index 4: Android App Developer
Index 5: Web App Developer
Element at bottom of Stack: Nicholas Key
Stack is empty: true
Exception in thread "main" java.lang.RuntimeException: Index out of bound. Supplied 1
at CustomStack.get(CustomStack.java:29)
at CustomStack.testCases(CustomStack.java:128)
at CustomStack.main(CustomStack.java:136)
Update: I've added several methods to make my CustomStack more robust ;) Click here to look at the improvements.

Friday, October 23, 2009

Sorting Algorithms (Bubble sort, Selection sort & Insertion Sort)

I want to refresh my mind about sorting algorithms and here are the first three simple sorting algorithms in this article - Bubble Sort, Selection Sort and Insertion Sort. I attribute the explanations to Wikipedia.

import java.util.Random;

public class SortingAlgorithm {

private final int SIZE = 2000;
private Random myRand = new Random();
private int[] numbers = new int[SIZE];

public SortingAlgorithm(){}

private void randomizeNumbers(){
for (int i = 0; i < numbers.length; i++) {
numbers[i] = myRand.nextInt( 2000 ) + 1;
}
}

private void printArray(){
for(int i: numbers){
System.out.print(i + " ");
}
System.out.println();
}

public void bubbleSort() {
randomizeNumbers();
System.out.println("BUBBLE SORT");
System.out.println("Presorted numbers: ");
printArray();
long start = System.nanoTime();

/**
* Bubblesort algorithm
* Wikipedia:
* works by repeatedly stepping through the list to be sorted,
* comparing each pair of adjacent items and swapping them if
* they are in the wrong order. The pass through the list is
* repeated until no swaps are needed, which indicates that the
* list is sorted. The algorithm gets its name from the way smaller
* elements "bubble" to the top of the list.
* Complexity:
* Worst = O(n^2)
* Average = O(n^2)
* Best = O(n)
*/
int n = numbers.length;
for (int pass=1; pass < n; pass++) {
for (int i=0; i < n-pass; i++) {
if (numbers[i] > numbers[i+1]) {
int temp = numbers[i];
numbers[i] = numbers[i+1];
numbers[i+1] = temp;
}
}
}

long elapsed = (System.nanoTime() - start);
System.out.println("Bubble-sorted numbers: ");
printArray();
System.out.println("Elapsed time: " + elapsed + "ns\n");
}

public void selectionSort(){
randomizeNumbers();
System.out.println("SELECTION SORT");
System.out.println("Presorted numbers: ");
printArray();
long start = System.nanoTime();

/**
* Selectionsort Algoritm
* Wikipedia:
* 1. Find the minimum value in the list
* 2. Swap it with the value in the first position
* 3. Repeat the steps above for the remainder of the list (starting
* at the second position and advancing each time)
* Complexity:
* Worst = O(n^2)
* Average = O(n^2)
* Best = O(n^2)
*/
for (int i=0; i<numbers.length-1; i++) {
int minIndex = i;
for (int j=i+1; j<numbers.length; j++) {
if (numbers[minIndex] > numbers[j]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = numbers[i];
numbers[i] = numbers[minIndex];
numbers[minIndex] = temp;
}
}

long elapsed = (System.nanoTime() - start);
System.out.println("Selection-sorted numbers: ");
printArray();
System.out.println("Elapsed time: " + elapsed + "ns\n");
}

public void insertionSort(){
randomizeNumbers();
System.out.println("INSERTION SORT");
System.out.println("Presorted numbers: ");
printArray();
long start = System.nanoTime();

/**
* Insertionsort Algorithm
* Wikipedia:
* much less efficient on large lists than more advanced algorithms
* such as quicksort, heapsort, or merge sort. However, insertion sort
* provides several advantages:
* 1. simple implementation
* 2. efficient for (quite) small data sets
* 3. adaptive, i.e. efficient for data sets that are already substantially
* sorted: the time complexity is O(n + d), where d is the number of inversions
* 4. more efficient in practice than most other simple quadratic (i.e. O(n^2)) algorithms
* such as selection sort or bubble sort
* Complexity:
* Worst = O(n^2)
* Average = O(n^2)
* Best = O(n)
*/
int in, out;
for(out=1; out<numbers.length; out++){
int temp = numbers[out];
in = out;
while(in>0 && numbers[in-1] >= temp){
numbers[in] = numbers[in-1];
--in;
}
numbers[in] = temp;
}

long elapsed = (System.nanoTime() - start);
System.out.println("Insertion-sorted numbers: ");
printArray();
System.out.println("Elapsed time: " + elapsed + "ns\n");
}

public static void main(String[] args) {
SortingAlgorithm sa = new SortingAlgorithm();
sa.bubbleSort();
sa.selectionSort();
sa.insertionSort();
}
}

Thursday, October 22, 2009

Web Journal's Ranking in Google Blog Search

Tell me you would be very happy if you are a blogger yourself and your blog is ranked top in the search result. I am thrilled to see this ;) Thanks to all the readers who make this possible.

Mirror by Jonas

This is a very special segment of my blog because I'm helping a reader of my blog to promote his API about Java Reflection. Many thanks to Jonas for coming up with such convenient API. You may take a look at his project "Mirror" at this link.
I would want to liken this Mirror API it to using Velocity to generate dynamic HTML in a sense that it eases your coding complexity.

Wednesday, October 21, 2009

Traversing Folder and Files

Here is an updated code to inform you if the file or folder specified does not exists. You may take a look at the original code at this article.


public void traverseFilesFolders () {
if (referencedFile.exists()) {
traverseFilesFolders(referencedFile);
} else {
System.out.println("File or Folder does not exist");
}
}