在java数据结构和算法(第二版),RObert Lafore著
第一个冒泡算法,
class ArrayBub
{
private long[] a;
private int nElems;
public ArrayBub(int max)
{
a = new long[max];
nElems=0;
}
public void insert(long value)
{
a[nElems] = value;
nElems++;
}
public void display()
{
for(int j=0;j<nElems;j++)
System.out.print(a[j]+" ");
System.out.println("");
}
public void bubbleSort()
{
int out,in;
for(out=nElems-1;out>1;out--)
for(in = 0;in<out;in++)
if(a[in]>a[in+1])
swap(in,in+1);
}
private void swap(int one,int two)
{
long temp = a[one];
a[one]=a[two];
a[two]= temp;
}
}
class BubbleSortApp
{
public static void main(String[] args)
{
int maxSize =100;
ArrayBub arr;
arr = new ArrayBub(maxSize);
arr.insert(67);
arr.insert(89);
arr.insert(90);
arr.insert(77);
arr.insert(99);
arr.insert(66);
arr.insert(44);
arr.display();
arr.bubbleSort();
arr.display();
}
}
上面的运行出来后,得到66 44 67 77 89 90 99,明显是错误的,我怀疑他少算了一步,上面的程序针对最小数不在末尾的数组,完全正确, 只要最小数在末尾就是错的,我想了半天,也不知道为什么,难道著名程序大师编的第二版也有错吗,请高手指教,上面冒泡排序关键代码如下
public void bubbleSort()
{
int out,in;
for(out=nElems-1;out>1;out--)
for(in = 0;in<out;in++)
if(a[in]>a[in+1])
swap(in,in+1);
第一个冒泡算法,
class ArrayBub
{
private long[] a;
private int nElems;
public ArrayBub(int max)
{
a = new long[max];
nElems=0;
}
public void insert(long value)
{
a[nElems] = value;
nElems++;
}
public void display()
{
for(int j=0;j<nElems;j++)
System.out.print(a[j]+" ");
System.out.println("");
}
public void bubbleSort()
{
int out,in;
for(out=nElems-1;out>1;out--)
for(in = 0;in<out;in++)
if(a[in]>a[in+1])
swap(in,in+1);
}
private void swap(int one,int two)
{
long temp = a[one];
a[one]=a[two];
a[two]= temp;
}
}
class BubbleSortApp
{
public static void main(String[] args)
{
int maxSize =100;
ArrayBub arr;
arr = new ArrayBub(maxSize);
arr.insert(67);
arr.insert(89);
arr.insert(90);
arr.insert(77);
arr.insert(99);
arr.insert(66);
arr.insert(44);
arr.display();
arr.bubbleSort();
arr.display();
}
}
上面的运行出来后,得到66 44 67 77 89 90 99,明显是错误的,我怀疑他少算了一步,上面的程序针对最小数不在末尾的数组,完全正确, 只要最小数在末尾就是错的,我想了半天,也不知道为什么,难道著名程序大师编的第二版也有错吗,请高手指教,上面冒泡排序关键代码如下
public void bubbleSort()
{
int out,in;
for(out=nElems-1;out>1;out--)
for(in = 0;in<out;in++)
if(a[in]>a[in+1])
swap(in,in+1);
思想正确就OK了....写本书多少有点笔误的...你把那行out的参数改下不就行了for(out=nElems-1;out>0;out--)