您的位置:首页 > 其它

数组元素删除与排序

2016-02-25 14:40 706 查看
2.1 向highArray.java程序(清单2.3)的HighArray类添加一个名为getMax()的方法,它返回 数组中最大关键字的值,当数组为空时返回-1。向main()中添加一些代码来使用这个方法。 可以假设所有关键字都是正数。

2.2 修改编程作业2.1中的方法,使之不仅返回最大的关键字,而且还将该关键字从数组中删除。 将这个方法命名为removeMax()。

2.3 编程作业2.2中的removeMax()方法提供了一种通过关键字值进行数组排序的方法。实现一个 排序方案,要求不修改HighArray类,只需对main()中的代码进行修改。这个方法需要第二个 数组,在排序结束时数组数据项是逆序排列的。

2.6 向highArray.java程序(清单2.3)的HighArray类中加入一个noDup()方法,使之可以将数组的所有重复数据项删除。即如果数组中有三个数据项的关键字为17,noDup()方法会删除其中的两个。不必考虑保持数据项的顺序。一种方法是先用每一个数据项同其他数据项比较,并用null(或是一个不会用在真正的关键字中的特殊值)将重复的数据项覆盖掉。然后将所有的null删除,当然还要缩小数组的大小。

public class HighArray {

/**
* @param args
*/
private long[] a;
private int nElems;

public HighArray(int max){
a = new long[max];
nElems = 0;
}

public boolean find(long searchKey){
int j;
for(j=0;j<nElems;j++){
if(a[j] == searchKey){
break;
}
}
if(j == nElems)
return false;
else
return true;
}

public void insert(long value){
a[nElems] = value;
nElems++;
}

public void delete(long value){
int j ;
for(j = 0;j < nElems;j++)
if(value == a[j])
break;

for(int k = j;k < nElems;k++){
a[k] = a[k+1];
}
nElems--;
}

public void display(){
for(int j = 0;j < nElems;j++){
System.out.print(a[j] + " ");
}
System.out.println("");
}

//=======================================================================================
//编程作业2.1
public long getMax(){
long max = -1;
for(int j =0; j < nElems-1;j++){
if(a[j] > max){
max = a[j];
}
}
return max;
}

//==========================================================================================
//编程作业2.2
public long removeMax(){
long max = -1;
int index = -1;
for(int j = 0;j <nElems;j++){
if(a[j] > max){
max = a[j];
index = j;
}
}
if(index != -1){
for(int i = index+1;i< nElems;i++){
a[i-1] = a[i];
}
nElems--;
}
return max;
}

//==========================================================================================
//编程作业2.6
public void noDup(){
int NULL = -1;
for(int j = 0;j <nElems;j++){
for(int i = j+1;i < nElems;i++){
if(a[j]!=NULL && a[j]==a[i]){
a[i] = NULL;
}
}
}
for(int i = 0;i < nElems;){
if(a[i]==NULL){
for(int j =i+1;j < nElems; j++){
a[j-1] = a[j];
}
nElems--;
}
else{
i++;
}
}
}
}


public class HighArrayApp {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int maxSize = 100;
HighArray arr;
arr = new HighArray(maxSize);
arr.insert(77);
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();

int searchKey = 35;
if(arr.find(searchKey)){
System.out.println("Found "+searchKey);
}
else{
System.out.println("Can't find "+searchKey);
}
arr.delete(00);
arr.delete(55);
arr.delete(99);

arr.display();

//==========================================================================================
//编程作业2.1
long max = arr.getMax();
System.out.println("Found max is "+max);

//================================================================================
//编程作业2.2
arr.removeMax();
arr.display();

//================================================================================
//编程作业2.3
HighArray sortedArr = new HighArray(maxSize);
int i = 0;
max = arr.removeMax();
while(max!=-1){
sortedArr.insert(max);
max = arr.removeMax();
}
System.out.println("逆序排列");
sortedArr.display();

arr.insert(77); // insert 10 items
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
// 重复值
arr.insert(44);
arr.insert(77);
arr.insert(44);
arr.insert(66);

arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
System.out.println("加入重复值后:");
arr.display();
arr.noDup();
System.out.println("去掉重复后:");
arr.display();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数组