3.3在insertSort.java程序(清单3.3)中增加一个名为noDups()的方法,这个方法从已经有
* 序的数组中删掉重复的数据项而不破坏有序性。(可以用insertionSort()方法对数据排序,
* 或者也可以简单地用main()方法将数据有序地插入到表中。)一种解决方法是每发现一个重复
* 的数据,就从这个位置开始到数组结尾都向前移动一个位置,但这样就导致消耗很长的O(N2)的
* 时间级,起码在有很多重复数据项的情况下是这样的。在设计的算法中,不论有多少重复数据,
* 要确保数据项最多只能移动一次。这样算法只消耗O(N)数量级的时间。 * 就目前来讲我暂时还想不出在不开辟新的空间,来达到书中作业要求的“要确保
* 数据项最多只能移动一次”这个目标。希望查看此源码的大侠们能给出好的方法。class ArrayIns
{
private long[] a; // ref to array a
private int nElems; // number of data items
//--------------------------------------------------------------
public ArrayIns(int max) // constructor
{
a = new long[max]; // create the array
nElems = 0; // no items yet
}
//--------------------------------------------------------------
public void insert(long value) // put element into array
{
a[nElems] = value; // insert it
nElems++; // increment size
}
//--------------------------------------------------------------
public void display() // displays array contents
{
for(int j=0; j<nElems; j++) // for each element,
System.out.print(a[j] + " "); // display it
System.out.println("");
}
//--------------------------------------------------------------
public void insertionSort()
{
int in, out; for(out=1; out<nElems; out++) // out is dividing line
{
long temp = a[out]; // remove ed item
in = out; // start shifts at out
while(in>0 && a[in-1] >= temp) // until one is smaller,
{
a[in] = a[in-1]; // shift item to right
--in; // go left one position
}
a[in] = temp; // insert ed item
} // end for
} // end insertionSort()
//--------------------------------------------------------------
} // end class ArrayIns
////////////////////////////////////////////////////////////////
class InsertSortApp
{
public static void main(String[] args)
{
int maxSize = 100; // array size
ArrayIns arr; // reference to array
arr = new ArrayIns(maxSize); // create the array arr.insert(77); // insert 10 items
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33); arr.display(); // display items arr.insertionSort(); // insertion-sort them arr.display(); // display them again
} // end main()
} // end class InsertSortApp
* 序的数组中删掉重复的数据项而不破坏有序性。(可以用insertionSort()方法对数据排序,
* 或者也可以简单地用main()方法将数据有序地插入到表中。)一种解决方法是每发现一个重复
* 的数据,就从这个位置开始到数组结尾都向前移动一个位置,但这样就导致消耗很长的O(N2)的
* 时间级,起码在有很多重复数据项的情况下是这样的。在设计的算法中,不论有多少重复数据,
* 要确保数据项最多只能移动一次。这样算法只消耗O(N)数量级的时间。 * 就目前来讲我暂时还想不出在不开辟新的空间,来达到书中作业要求的“要确保
* 数据项最多只能移动一次”这个目标。希望查看此源码的大侠们能给出好的方法。class ArrayIns
{
private long[] a; // ref to array a
private int nElems; // number of data items
//--------------------------------------------------------------
public ArrayIns(int max) // constructor
{
a = new long[max]; // create the array
nElems = 0; // no items yet
}
//--------------------------------------------------------------
public void insert(long value) // put element into array
{
a[nElems] = value; // insert it
nElems++; // increment size
}
//--------------------------------------------------------------
public void display() // displays array contents
{
for(int j=0; j<nElems; j++) // for each element,
System.out.print(a[j] + " "); // display it
System.out.println("");
}
//--------------------------------------------------------------
public void insertionSort()
{
int in, out; for(out=1; out<nElems; out++) // out is dividing line
{
long temp = a[out]; // remove ed item
in = out; // start shifts at out
while(in>0 && a[in-1] >= temp) // until one is smaller,
{
a[in] = a[in-1]; // shift item to right
--in; // go left one position
}
a[in] = temp; // insert ed item
} // end for
} // end insertionSort()
//--------------------------------------------------------------
} // end class ArrayIns
////////////////////////////////////////////////////////////////
class InsertSortApp
{
public static void main(String[] args)
{
int maxSize = 100; // array size
ArrayIns arr; // reference to array
arr = new ArrayIns(maxSize); // create the array arr.insert(77); // insert 10 items
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33); arr.display(); // display items arr.insertionSort(); // insertion-sort them arr.display(); // display them again
} // end main()
} // end class InsertSortApp
解决方案 »
- 求教一个关于队的应用的编程题目
- JFrame汉字标题 出现乱码 ?这怎么解决 有时程序中有汉字就不能通过编译
- 要开除啦。新人求思路。一个帐号对应多个联系地址
- 求能人解析以下五子棋判断输赢的核心代码是什么意思
- 求助----为什么图片一直显示不了? 急!!!!
- 谁知道一开机就让一个*.java文件有频率的执行间阁时间为10分钟
- 用Graphics的drawLine画线或圆,怎么设置线宽?
- JTable显示区域之自动定位
- 请问:::throw和throws有什么区别,详细些!!!!
- 长沙最好的计算机书店在哪里?地址写清楚
- 关于SimpleDateFormate.parse(String para)不能检查日期的合法性问题
- 关于java异常何时抛出问题
int i,j,nCount;
nCount=0;
for(i=0;i<nElems;i++) {
for(j =i+1;j<nElems;j++) {
if(a[i]==a[j])
a[j] = -1;
}
}
for(i=0; i<nElems; i++) {
if(a[i]==-1)
nCount++;
else
a[i-nCount]=a[i];
}
nElems=nElems-nCount;
}已经写好了,感谢楼上各位,特别是6,7,10楼的
给出宝贵意见