希爾排序及代碼實現

The shellSort.java Program

// shellSort.java

// demonstrates shell sort

// to run this program: C>java ShellSortApp

//-------------------------------------------------------------

class ArraySh

{

private double[] theArray; // ref to array theArray

private int nElems; // number of data items

//-------------------------------------------------------------

public ArraySh(int max) // constructor

{

theArray = new double[max]; // create the array

nElems = 0; // no items yet

}

//-------------------------------------------------------------

public void insert(double value) // put element into array

{

theArray[nElems] = value; // insert it

nElems++; // increment size

}

//-------------------------------------------------------------

public void display() // displays array contents

{

System.out.print("A=");

for(int j=0; j<nElems; j++) // for each element,

System.out.print(theArray[j] + " "); // display it

System.out.println(""); }

//-------------------------------------------------------------

public void shellSort()

{

int inner, outer;

double temp;

int h = 1; // find initial value of h

while(h <= nElems/3)

h = h*3 + 1; // (1, 4, 13, 40, 121,...)

while(h>0) // decreasing h, until h=1

{

// h-sort the file

for(outer=h; outer<nElems; outer++)

{

temp = theArray[outer];

inner = outer;

// one subpass (eg 0, 4,8)

while(inner > h-1 && theArray[inner-h] >= temp)

{

theArray[inner] = theArray[inner-h];

//System.out.println("h="+h+"; swarp: "+inner+"/"+(inner-h));

inner -= h;

}

theArray[inner] = temp;

} // end for

h = (h-1) / 3; // decrease h

//display();

} // end while(h>0)

} // end shellSort()

//-------------------------------------------------------------

} // end class ArraySh

////////////////////////////////////////////////////////////////

class ShellSortApp

{

public static void main(String[] args)

{

int maxSize = 50; // array size

ArraySh arr;

arr = new ArraySh(maxSize); // create the array

for(int j=0; j<maxSize; j++) // fill array with

{ // random numbers

double n = (int)(java.lang.Math.random()*99);

arr.insert(n);

}

arr.display(); // display unsorted array

arr.shellSort(); // shell sort the array

arr.display(); // display sorted array

} // end main()

} // end class ShellSortApp


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章