public class SelectionSort {
public static void main(String[] args) {
int[] array = {6,7,3,8,1,2,3,4,5};
new SelectionSort().selectionSort(array);
for(int i=0; i < array.length ; i++)
System.out.println(array[i]);
}
public void selectionSort(int[] array ){
int min = 0;
int length = array.length;
for (int i = 0; i <= length - 2; i++){
min = i;
for(int j = i+1 ; j <= length - 1 ; j++){
if(array[min] > array[j]){
min = j;
}
}
if(min != i){ // This if condition is not there in original algorithm. It helps unnecessary swapping of same value in to same location again (min = i)
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
}
Sunday, May 13, 2012
Selection Sort in Java
Bubble Sort in Java
public class BubbleSort {
public static void main(String[] args){
int[] array = {1,2,3,4,5};
new BubbleSort().bubbleSort(array);
for(int i=0; i < array.length ; i++)
System.out.println(array[i]);
}
public void bubbleSort(int[] array){
int length = array.length;
int count = 0; //counts if no swapping is done
for(int i = 0 ; i <= length-2 ; i++){
count = 0;
for(int j = 0 ; j <= length-i-2 ; j++){
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
count ++ ;
}
}
if(count == 0){ // This if is not there in actual algorithm. If there are no swaps in the pass that means the array is sorted
System.out.println("broke on i = " + i);
break;
}
}
}
}
Insertion Sort in Java
public class InsertionSort {
public static void main(String[] args){
int[] array = {6,7,3,8,1,2,3,4,5};
new InsertionSort().insertionSort(array);
for(int i=0; i < array.length ; i++)
System.out.println(array[i]);
}
public void insertionSort(int[] array){
for(int j=1; j <= array.length-1; j++){
insert(array, j);
}
}
//insert array[index] into sorted sequence array[0]...array[index-1]
private void insert(int[] array, int indexToInsert){
int key = array[indexToInsert];
int i = indexToInsert - 1;
while(i >=0 && array[i] > key){
array[i+1] = array[i];
i--;
}
array[i + 1] = key;
}
}
Saturday, May 12, 2012
Doubly linked list implementation in java
I used generics here to write this.
public class DLLNode{ private E data = null; private DLLNode prevNode = null; private DLLNode nextNode = null; public E getData() { return data; } public void setData(E data) { this.data = data; } public DLLNode getPrevNode() { return prevNode; } public void setPrevNode(DLLNode prevNode) { this.prevNode = prevNode; } public DLLNode getNextNode() { return nextNode; } public void setNextNode(DLLNode nextNode) { this.nextNode = nextNode; } } public class DoublyLinkedList { private DLLNode headNode = null; private DLLNode tailNode = null; private int nodeCount = 0; public void addFirst(E data){ DLLNode newNode = new DLLNode (); newNode.setData(data); if(headNode == null && tailNode == null){ headNode = tailNode = newNode; //new node becomes both head and tail } else{ newNode.setNextNode(headNode); headNode.setPrevNode(newNode); headNode = newNode; } nodeCount++; } public void addLast(E data){ DLLNode newNode = new DLLNode (); newNode.setData(data); if(headNode == null && tailNode == null){ headNode = tailNode = newNode; //new node becomes both head and tail } else{ tailNode.setNextNode(newNode); newNode.setPrevNode(tailNode); tailNode = newNode; } nodeCount++; } public boolean delete(E data){ DLLNode curNode = headNode; DLLNode prevNode = headNode; while(curNode != null){ if(curNode.getData().equals(data)){ //find the node which has the data prevNode = curNode.getPrevNode(); if(nodeCount == 1){ // if there is only node in the list, and that one node contains the data to be deleted headNode = tailNode = null; // now both head and tail points nowhere } else if(curNode == headNode){ headNode = headNode.getNextNode(); // move the head node to next node headNode.setPrevNode(null); // make new head node's prev node value as null curNode.setNextNode(null); // set the next node of the previous head node (cur node) to null } else if(curNode == tailNode){ tailNode = prevNode; // make the tail node as previous node tailNode.setNextNode(null); //set the next node of tail node as null, as this is the tail node curNode.setPrevNode(null); //make cur node not point to prev node } else{ prevNode.setNextNode(curNode.getNextNode()); // make the prev node point to next node of cur node curNode.getNextNode().setPrevNode(prevNode); //make next node point to pren node curNode.setNextNode(null); // make cur node not point to next node curNode.setPrevNode(null); // make cur node not point to prev node } nodeCount--; return true; //return true to say that data is found and is deleted } curNode = curNode.getNextNode(); } return false; // //return false to say that data is not found and is not deleted } public void displayLinkedListFromHead(){ DLLNode node = headNode; System.out.println("Node Count: " + nodeCount); if(headNode != null){ System.out.println("Head Node: " + headNode.getData()); System.out.println("Tail Node: " + tailNode.getData()); } while(node != null){ System.out.println(node.getData().toString()); node = node.getNextNode(); } } public void displayLinkedListFromTail(){ DLLNode node = tailNode; System.out.println("Node Count: " + nodeCount); if(headNode != null){ System.out.println("Head Node: " + headNode.getData()); System.out.println("Tail Node: " + tailNode.getData()); } while(node != null){ System.out.println(node.getData().toString()); node = node.getPrevNode(); } } } public class TestDLL { public static void main(String[] args){ DoublyLinkedList list = new DoublyLinkedList (); list.addFirst(1); list.addFirst(2); list.addLast(3); list.addLast(4); //list.delete(2); //list.delete(3); //list.delete(2); list.delete(4); list.displayLinkedListFromHead(); list.displayLinkedListFromTail(); } }
Singly linked list implementation in java
I used generics here to write this.
public class Node{ private E data = null; private Node nextNode = null; public Node(E data){ this.data = data; this.nextNode = null; } public Node(){ } public E getData() { return data; } public void setData(E data) { this.data = data; } public Node getNextNode() { return nextNode; } public void setNextNode(Node nextNode) { this.nextNode = nextNode; } } public class SinglyLinkedList { private Node headNode = null; private Node tailNode = null; private int nodeCount = 0; public void addFirst(E data){ // add to the head Node newNode = new Node (data); if(headNode == null && tailNode == null){ // if list is empty, newNode is both the head and tail headNode = tailNode = newNode; } else{ // make newly added node as head node newNode.setNextNode(headNode); headNode = newNode; } nodeCount++; } public void addLast(E data){ // add to the tail Node newNode = new Node (data); if(headNode == null && tailNode == null){ // if list is empty, newNode is both the head and tail headNode = tailNode = newNode; } else{ // make newly added node as tail node tailNode.setNextNode(newNode); tailNode = newNode; } nodeCount++; } public boolean delete(E data){ Node curNode = headNode; Node prevNode = headNode; while(curNode != null){ if(curNode.getData().equals(data)){ //find the node which has the data if(nodeCount == 1){ // if there is only node in the list, and that one node contains the data to be deleted headNode = tailNode = null; // now both head and tail points nowhere } else if(curNode == headNode){ headNode = headNode.getNextNode(); // move the head node to next node curNode.setNextNode(null); // set the next node of the previous head node (cur node) to null null } else if(curNode == tailNode){ tailNode = prevNode; // make the tail node as previous node tailNode.setNextNode(null); //set the next node of tail node as null, as this is the tail node } else{ prevNode.setNextNode(curNode.getNextNode()); // make the prev node point to next node of cur node curNode.setNextNode(null); // make cur node not point to next node } nodeCount--; return true; //return true to say that data is found and is deleted } prevNode = curNode; curNode = curNode.getNextNode(); } return false; // //return false to say that data is not found and is not deleted } public void displayLinkedList(){ Node node = headNode; System.out.println("Node Count: " + nodeCount); if(headNode != null){ System.out.println("Head Node: " + headNode.getData()); System.out.println("Tail Node: " + tailNode.getData()); } while(node != null){ System.out.println(node.getData().toString()); node = node.getNextNode(); } } } public class TestLinkedList { public static void main(String [] args){ SinglyLinkedList list = new SinglyLinkedList (); list.addFirst(1); list.addFirst(2); list.addLast(3); list.addLast(4); list.addFirst(5); list.displayLinkedList(); list.delete(5); list.delete(4); list.displayLinkedList(); } }
Subscribe to:
Comments (Atom)