package demo2;
import java.awt .Color ;
import java.awt .Graphics ;
import java.util .ArrayList ;
import java.util .Iterator ;
import java.util .Random ;
class isortentry {
int type, i, j;
Color c;
String print = null;
public isortentry( int type, int i, Color c) //1 means initial color;
{
this .type = type;
this .i = i;
this .c = c;
if ( this .type == 1 ) {
print = "Checking elements " + i;
} else if ( this .type == 3 )
{
print = "Correct position found..." ;
}
}
public isortentry( int type, int i, int j) //1 means initial color;
{
this .type = type;
this .i = i;
this .j = j;
// this.c = c;
print = "Right shifting... " ;
}
}
public class isortvis extends State {
public UIManager uiManager;
Random r = new Random( 256 ) ;
Color mycolor = new Color( 230 , 92 , 0 ) ;
int i = 2 , ptr = 1 , n = 12 , temp, si, sj, cycle;
visunumber[ ] a = new visunumber[ 25 ] ;
boolean isnew, isswaping;
int pos = 500 ;
ArrayList< isortentry> log = new ArrayList< isortentry> ( ) ;
int list[ ] = new int [ 25 ] ;
int scale;
boolean isrunning;
Iterator itr;
isortentry cur;
public isortvis( Handler handler) {
super( handler) ;
uiManager = new UIManager( handler) ;
isnew = true ;
uiManager.addObject ( new UIImageButton( 800 , 450 , 128 , 48 , Assets.back_bt , new ClickListener( ) {
@Override
public void onClick( ) {
handler.getMouseManager ( ) .setUIManager ( null) ;
handler.getGame ( ) .algomain .init ( 2 ) ;
handler.getMouseManager ( ) .setUIManager ( handler.getGame ( ) .algomain .getUIManager ( ) ) ;
State.setState ( handler.getGame ( ) .algomain ) ;
isnew = true ;
isswaping = false ;
setFps( 10 , 500 ) ;
}
} ) ) ;
uiManager.addObject ( new textclick( 300 , 500 , 40 , 40 , "1" , new ClickListener( ) {
public void onClick( ) {
setFps( 3 , 300 ) ;
}
} ) ) ;
uiManager.addObject ( new textclick( 350 , 500 , 40 , 40 , "2" , new ClickListener( ) {
public void onClick( ) {
setFps( 5 , 350 ) ;
}
} ) ) ;
uiManager.addObject ( new textclick( 400 , 500 , 40 , 40 , "3" , new ClickListener( ) {
public void onClick( ) {
setFps( 7 , 400 ) ;
}
} ) ) ;
uiManager.addObject ( new textclick( 450 , 500 , 40 , 40 , "4" , new ClickListener( ) {
public void onClick( ) {
setFps( 9 , 450 ) ;
}
} ) ) ;
uiManager.addObject ( new textclick( 500 , 500 , 40 , 40 , "5" , new ClickListener( ) {
public void onClick( ) {
setFps( 10 , 500 ) ;
}
} ) ) ;
}
private void swap( visunumber a[ ] , int in, int jn) {
visunumber temp = a[ in] ;
a[ in] = a[ jn] ;
a[ jn] = temp;
}
private void swapt( int a[ ] , int in, int jn) {
int temp = a[ in] ;
a[ in] = a[ jn] ;
a[ jn] = temp;
}
void insertionSort( ) {
int i, key, j;
for ( i = 1 ; i < n; i++ ) {
key = list[ i] ;
log .add ( new isortentry( 1 , i, Color.RED ) ) ;
j = i - 1 ;
while ( j > 0 && list[ j] > key) {
list[ j + 1 ] = list[ j] ;
log .add ( new isortentry( 2 , j, j+ 1 ) ) ;
j = j - 1 ;
}
list[ j + 1 ] = key;
log .add ( new isortentry( 3 , j+ 1 , Color.white ) ) ;
}
}
public void init( ) {
n = 15 ;
for ( int k = 0 ; k <= 15 ; k++ ) {
int rand = 5 + r.nextInt ( 35 ) ;
a[ k] = new visunumber( rand , mycolor, 400 , 300 - rand * 5 , rand * 5 , 30 ) ;
// ori[k] = a[k];
list[ k] = rand ;
}
list[ 0 ] = - 1 ;
insertionSort( ) ;
isswaping = false ;
i = 0 ;
itr = log .iterator ( ) ;
isrunning = true ;
setFps( 2 , 350 ) ;
scale = 0 ;
isswaping = false ;
// play = true;
}
@Override
public void tick( ) {
uiManager.tick ( ) ;
if ( ! isswaping) {
if ( isrunning && scale == 0 ) {
if ( itr.hasNext ( ) ) {
cur = ( isortentry) itr.next ( ) ;
} else {
for ( int i = 0 ; i < n; i++ ) {
a[ i] .setColor ( Color.white ) ;
isrunning = false ;
}
}
if ( cur ! = null) {
// cp = cur.print;
}
scale = 1 ;
} else {
scale-- ;
}
}
}
@Override
public void render( Graphics g) {
g.drawImage ( Assets.blankbg , 0 , 0 , null) ;
g.setColor ( Color.white ) ;
g.setFont ( Assets.title ) ;
g.drawString ( "I Sort" , 300 , 40 ) ;
g.setColor ( Color.white ) ;
g.setFont ( Assets.consolett ) ;
g.drawString ( "Speed: " , 220 , 520 ) ;
g.drawString ( "^" , pos + 10 , 500 ) ;
uiManager.render ( g) ;
if ( ! isswaping) {
if ( cur ! = null) {
if ( cur.type == 1 ) {
a[ cur.i ] .setY ( a[ cur.i ] .y + a[ cur.i ] .h ) ;
a[ cur.i ] .setColor ( Color.red ) ;
} else if ( cur.type == 2 )
{
swap( a, cur.i , cur.j ) ;
}
else if ( cur.type == 3 )
{
a[ cur.i ] .setY ( a[ cur.i ] .y - a[ cur.i ] .h ) ;
a[ cur.i ] .setColor ( Color.white ) ;
}
}
cur = null;
}
for ( int i = 1 ; i < n; i++ ) {
a[ i] .drawbox ( g, i) ;
}
}
@Override
public UIManager getUIManager( ) {
return uiManager;
}
@Override
public void init( int i) {
throw new UnsupportedOperationException( "Not supported yet." ) ; //To change body of generated methods, choose Tools | Templates.
}
public void setFps( int n, int i) {
pos = i;
handler.getGame ( ) .setFps ( n) ;
}
}
cGFja2FnZSBkZW1vMjsKIAppbXBvcnQgamF2YS5hd3QuQ29sb3I7CmltcG9ydCBqYXZhLmF3dC5HcmFwaGljczsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogCmNsYXNzIGlzb3J0ZW50cnkgewogCiAgICBpbnQgdHlwZSwgaSwgajsKICAgIENvbG9yIGM7CiAgICBTdHJpbmcgcHJpbnQgPSBudWxsOwogCiAgICBwdWJsaWMgaXNvcnRlbnRyeShpbnQgdHlwZSwgaW50IGksIENvbG9yIGMpLy8xIG1lYW5zIGluaXRpYWwgY29sb3I7CiAgICB7CiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICAgICB0aGlzLmkgPSBpOwogICAgICAgIHRoaXMuYyA9IGM7CiAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAxKSB7CiAgICAgICAgICAgIHByaW50ID0gIkNoZWNraW5nIGVsZW1lbnRzICIgKyBpOwogICAgICAgIH0gZWxzZSBpZih0aGlzLnR5cGU9PTMpCiAgICAgICAgewogICAgICAgICAgICBwcmludCA9ICJDb3JyZWN0IHBvc2l0aW9uIGZvdW5kLi4uIjsKICAgICAgICB9CiAgICAgICAgCiAgICB9CiAKICAgIHB1YmxpYyBpc29ydGVudHJ5KGludCB0eXBlLCBpbnQgaSwgaW50IGopLy8xIG1lYW5zIGluaXRpYWwgY29sb3I7CiAgICB7CiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICAgICB0aGlzLmkgPSBpOwogICAgICAgIHRoaXMuaiA9IGo7CiAgICAgICAvLyB0aGlzLmMgPSBjOwogICAgICAgIHByaW50ID0gIlJpZ2h0IHNoaWZ0aW5nLi4uICI7CiAgICB9CiAKfQogCiAKcHVibGljIGNsYXNzIGlzb3J0dmlzIGV4dGVuZHMgU3RhdGUgewogCiAgICBwdWJsaWMgVUlNYW5hZ2VyIHVpTWFuYWdlcjsKICAgIFJhbmRvbSByID0gbmV3IFJhbmRvbSgyNTYpOwogICAgQ29sb3IgbXljb2xvciA9IG5ldyBDb2xvcigyMzAsIDkyLCAwKTsKICAgIGludCBpID0gMiwgcHRyID0gMSwgbiA9IDEyLCB0ZW1wLCBzaSwgc2osIGN5Y2xlOwogICAgdmlzdW51bWJlcltdIGEgPSBuZXcgdmlzdW51bWJlclsyNV07CiAgICBib29sZWFuIGlzbmV3LCBpc3N3YXBpbmc7CiAgICBpbnQgcG9zID0gNTAwOwogCiAKICAgIEFycmF5TGlzdDxpc29ydGVudHJ5PiBsb2cgPSBuZXcgQXJyYXlMaXN0PGlzb3J0ZW50cnk+KCk7CiAgICBpbnQgbGlzdFtdID0gbmV3IGludFsyNV07CiAgICBpbnQgc2NhbGU7CiAgICBib29sZWFuIGlzcnVubmluZzsKICAgIEl0ZXJhdG9yIGl0cjsKICAgIGlzb3J0ZW50cnkgY3VyOwogCiAgICBwdWJsaWMgaXNvcnR2aXMoSGFuZGxlciBoYW5kbGVyKSB7CiAgICAgICAgc3VwZXIoaGFuZGxlcik7CiAgICAgICAgdWlNYW5hZ2VyID0gbmV3IFVJTWFuYWdlcihoYW5kbGVyKTsKICAgICAgICBpc25ldyA9IHRydWU7CiAgICAgICAgdWlNYW5hZ2VyLmFkZE9iamVjdChuZXcgVUlJbWFnZUJ1dHRvbig4MDAsIDQ1MCwgMTI4LCA0OCwgQXNzZXRzLmJhY2tfYnQsIG5ldyBDbGlja0xpc3RlbmVyKCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljaygpIHsKICAgICAgICAgICAgICAgIGhhbmRsZXIuZ2V0TW91c2VNYW5hZ2VyKCkuc2V0VUlNYW5hZ2VyKG51bGwpOwogICAgICAgICAgICAgICAgaGFuZGxlci5nZXRHYW1lKCkuYWxnb21haW4uaW5pdCgyKTsKICAgICAgICAgICAgICAgIGhhbmRsZXIuZ2V0TW91c2VNYW5hZ2VyKCkuc2V0VUlNYW5hZ2VyKGhhbmRsZXIuZ2V0R2FtZSgpLmFsZ29tYWluLmdldFVJTWFuYWdlcigpKTsKICAgICAgICAgICAgICAgIFN0YXRlLnNldFN0YXRlKGhhbmRsZXIuZ2V0R2FtZSgpLmFsZ29tYWluKTsKICAgICAgICAgICAgICAgIGlzbmV3ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlzc3dhcGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgc2V0RnBzKDEwLCA1MDApOwogICAgICAgICAgICB9CiAgICAgICAgfSkpOwogCiAgICAgICAgdWlNYW5hZ2VyLmFkZE9iamVjdChuZXcgdGV4dGNsaWNrKDMwMCwgNTAwLCA0MCwgNDAsICIxIiwgbmV3IENsaWNrTGlzdGVuZXIoKSB7CiAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soKSB7CiAgICAgICAgICAgICAgICBzZXRGcHMoMywgMzAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgICB1aU1hbmFnZXIuYWRkT2JqZWN0KG5ldyB0ZXh0Y2xpY2soMzUwLCA1MDAsIDQwLCA0MCwgIjIiLCBuZXcgQ2xpY2tMaXN0ZW5lcigpIHsKICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljaygpIHsKICAgICAgICAgICAgICAgIHNldEZwcyg1LCAzNTApOwogICAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICAgIHVpTWFuYWdlci5hZGRPYmplY3QobmV3IHRleHRjbGljayg0MDAsIDUwMCwgNDAsIDQwLCAiMyIsIG5ldyBDbGlja0xpc3RlbmVyKCkgewogICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKCkgewogICAgICAgICAgICAgICAgc2V0RnBzKDcsIDQwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICAgICAgdWlNYW5hZ2VyLmFkZE9iamVjdChuZXcgdGV4dGNsaWNrKDQ1MCwgNTAwLCA0MCwgNDAsICI0IiwgbmV3IENsaWNrTGlzdGVuZXIoKSB7CiAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soKSB7CiAgICAgICAgICAgICAgICBzZXRGcHMoOSwgNDUwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgICB1aU1hbmFnZXIuYWRkT2JqZWN0KG5ldyB0ZXh0Y2xpY2soNTAwLCA1MDAsIDQwLCA0MCwgIjUiLCBuZXcgQ2xpY2tMaXN0ZW5lcigpIHsKICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljaygpIHsKICAgICAgICAgICAgICAgIHNldEZwcygxMCwgNTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pKTsKICAgIH0KIAogICAgcHJpdmF0ZSB2b2lkIHN3YXAodmlzdW51bWJlciBhW10sIGludCBpbiwgaW50IGpuKSB7CiAgICAgICAgdmlzdW51bWJlciB0ZW1wID0gYVtpbl07CiAgICAgICAgYVtpbl0gPSBhW2puXTsKICAgICAgICBhW2puXSA9IHRlbXA7CiAKICAgIH0KIAogCiAgICBwcml2YXRlIHZvaWQgc3dhcHQoaW50IGFbXSwgaW50IGluLCBpbnQgam4pIHsKICAgICAgICBpbnQgdGVtcCA9IGFbaW5dOwogICAgICAgIGFbaW5dID0gYVtqbl07CiAgICAgICAgYVtqbl0gPSB0ZW1wOwogCiAgICB9CiAKICAgIHZvaWQgaW5zZXJ0aW9uU29ydCgpIHsKICAgICAgICBpbnQgaSwga2V5LCBqOwogICAgICAgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAga2V5ID0gbGlzdFtpXTsKICAgICAgICAgICAgbG9nLmFkZChuZXcgaXNvcnRlbnRyeSgxLCBpLCBDb2xvci5SRUQpKTsKICAgICAgICAgICAgaiA9IGkgLSAxOwogICAgICAgICAgICB3aGlsZSAoaiA+IDAgJiYgbGlzdFtqXSA+IGtleSkgewogICAgICAgICAgICAgICAgbGlzdFtqICsgMV0gPSBsaXN0W2pdOwogICAgICAgICAgICAgICAgbG9nLmFkZChuZXcgaXNvcnRlbnRyeSgyLCBqLCBqKzEpKTsKICAgICAgICAgICAgICAgIGogPSBqIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsaXN0W2ogKyAxXSA9IGtleTsKICAgICAgICAgICAgbG9nLmFkZChuZXcgaXNvcnRlbnRyeSgzLCBqKzEsIENvbG9yLndoaXRlKSk7CiAgICAgICAgfQogICAgfQogCgogICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgbiA9IDE1OwogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDw9MTU7IGsrKykgewogICAgICAgICAgICBpbnQgcmFuZCA9IDUgKyByLm5leHRJbnQoMzUpOwogICAgICAgICAgICBhW2tdID0gbmV3IHZpc3VudW1iZXIocmFuZCwgbXljb2xvciwgNDAwLCAzMDAgLSByYW5kICogNSwgcmFuZCAqIDUsIDMwKTsKICAgICAgICAgICAvLyBvcmlba10gPSBhW2tdOwogICAgICAgICAgICBsaXN0W2tdID0gcmFuZDsKICAgICAgICB9CiAgICAgICAgbGlzdFswXT0tMTsKICAgICAgICBpbnNlcnRpb25Tb3J0KCk7CiAgICAgICAgaXNzd2FwaW5nID0gZmFsc2U7CiAgICAgICAgaSA9IDA7CiAgICAgICAKICAgICAgICBpdHIgPSBsb2cuaXRlcmF0b3IoKTsKICAgICAgICBpc3J1bm5pbmcgPSB0cnVlOwogICAgICAgIHNldEZwcygyLCAzNTApOwogICAgICAgIHNjYWxlID0gMDsKICAgICAgICBpc3N3YXBpbmcgPSBmYWxzZTsKICAgICAgIC8vIHBsYXkgPSB0cnVlOwogCiAgICB9CiAKICAgIEBPdmVycmlkZQogICAgcHVibGljIHZvaWQgdGljaygpIHsKIAogICAgICAgIHVpTWFuYWdlci50aWNrKCk7CiAgICAgICAgaWYgKCFpc3N3YXBpbmcpIHsKICAgICAgICAgICAgICAgIGlmIChpc3J1bm5pbmcgJiYgc2NhbGUgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpdHIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IChpc29ydGVudHJ5KSBpdHIubmV4dCgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2ldLnNldENvbG9yKENvbG9yLndoaXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzcnVubmluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChjdXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgIC8vIGNwID0gY3VyLnByaW50OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNjYWxlLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KIAogICAgfQogCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyB2b2lkIHJlbmRlcihHcmFwaGljcyBnKSB7CiAgICAgICAgZy5kcmF3SW1hZ2UoQXNzZXRzLmJsYW5rYmcsIDAsIDAsIG51bGwpOwogCiAgICAgICAgZy5zZXRDb2xvcihDb2xvci53aGl0ZSk7CiAgICAgICAgZy5zZXRGb250KEFzc2V0cy50aXRsZSk7CiAgICAgICAgZy5kcmF3U3RyaW5nKCJJIFNvcnQiLCAzMDAsIDQwKTsKIAogICAgICAgIGcuc2V0Q29sb3IoQ29sb3Iud2hpdGUpOwogICAgICAgIGcuc2V0Rm9udChBc3NldHMuY29uc29sZXR0KTsKICAgICAgICBnLmRyYXdTdHJpbmcoIlNwZWVkOiAiLCAyMjAsIDUyMCk7CiAgICAgICAgZy5kcmF3U3RyaW5nKCJeIiwgcG9zICsgMTAsIDUwMCk7CiAgICAgICAgdWlNYW5hZ2VyLnJlbmRlcihnKTsKIAogCiAgICAgICAgaWYgKCFpc3N3YXBpbmcpIHsKICAgICAgICAgICAgaWYgKGN1ciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAoY3VyLnR5cGUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgIGFbY3VyLmldLnNldFkoYVtjdXIuaV0ueSArYVtjdXIuaV0uaCk7CiAgICAgICAgICAgICAgICAgICAgYVtjdXIuaV0uc2V0Q29sb3IoQ29sb3IucmVkKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZihjdXIudHlwZT09MikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzd2FwKGEsIGN1ci5pLCBjdXIuaik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKGN1ci50eXBlPT0zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFbY3VyLmldLnNldFkoYVtjdXIuaV0ueSAtIGFbY3VyLmldLmgpOwogICAgICAgICAgICAgICAgICAgIGFbY3VyLmldLnNldENvbG9yKENvbG9yLndoaXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjdXIgPSBudWxsOwogICAgICAgIH0KIAogICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgICAgYVtpXS5kcmF3Ym94KGcsIGkpOwogCiAgICB9CiAgICB9CiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBVSU1hbmFnZXIgZ2V0VUlNYW5hZ2VyKCkgewogICAgICAgIHJldHVybiB1aU1hbmFnZXI7CiAgICB9CiAKICAgIEBPdmVycmlkZQogICAgcHVibGljIHZvaWQgaW5pdChpbnQgaSkgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiTm90IHN1cHBvcnRlZCB5ZXQuIik7IC8vVG8gY2hhbmdlIGJvZHkgb2YgZ2VuZXJhdGVkIG1ldGhvZHMsIGNob29zZSBUb29scyB8IFRlbXBsYXRlcy4KICAgIH0KIAogICAgcHVibGljIHZvaWQgc2V0RnBzKGludCBuLCBpbnQgaSkgewogICAgICAgIHBvcyA9IGk7CiAgICAgICAgaGFuZGxlci5nZXRHYW1lKCkuc2V0RnBzKG4pOwogICAgfQp9