您的位置:首页 > 其它

数组和快速排序

2015-07-05 20:27 281 查看
一、数组
1.数组的声明。两种形式:1.类型标识符[] 数组名,int[] a;2.类型标识符 数组名[],int []a。一个数组可以声明语句可以多个数组变量 int[] a,b,c;

使用数组的第二步是为数组分配内存,实际创建数组。java中的内存分配操作使用new操作,符格式:数组名=new 类型标识符[整型表达式];
代码演示:
//利用数组的长度进行操作
for(i=a.length-1;i>=0;i--){
System.out.println("a["+i"]="+a[i]);//逆序打印数组
}
2.多维数组 ,格式:1.类型标识符 数组名[][] 2.类型标识符[][] 数组名 3.类型标识符[] 数组名[]
eg:int a[][]=new int[2][3];
public class Sample{
public static void main(String[] args){
int[][] arr={{1,2,3},{4,5,6}};
int[] foo=arr[0];
//双重循环输出二维数组的各个元素,行优先输出元素
for(int i=0;i<=arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");//注意length所代表的长度,数组名直接加上length(arr.length)表示的是数组的行数,而索引后arr[0].length表示的是列数
}
}
}
}
二、数组相关用法
1.复制数组,使用系统方法arraycopy,可以有效的复制,需要五个参数:public static void arraycopy(Object source,int
srcIndex,Object dest,int destindex,int length)。

System.arraycopy(copyF,2,copyT,0,7);//将copyF数组的第三个元素起的七个元素复制到copyT数组中。
2.也可以赋值。
搜索数组。1.顺序查找;2.二分查找。3.Array类的binarySearch方法
binarySearch方法声明如下:public static int binarySearch(Xxx a[],Xxx v)是使用这班查找算法在指定的数组a查找值为v的元素。

三、排序数组
快速排序基本思想;使用快速排序方法对a[0,n-1]排序,从a[0,n-1]中排序选择一个元素作为Middle,该元素为中点(支点),把剩余的元素分割为两段--left和right。。

class Sample5{
private double[] theArry;//对象私有属性
private int nElems;//记录数组长度
//----------------------------------
public Sample5(int max){//构造函数
theArry =new double[max];//创建数组
nElems=0;//开始数组长度为0

}
//------------------------------
public void insert(double value){//将元素插入数组
theArry[nElems]=value;
nElems++;

}
//------------------------------------
public void dispaly(){//打印数组
System.out.print("A=");
for(int j=0;j<nElems;j++)
System.out.print(theArry[j]+" ");
System.out.print(" ");

}
//------------------------------------------
public void quickSort(){//执行快速排序算法
recQuickSort(0,nElems-1);
}
//快速算法核心部分,设定左下标和右下标
public void recQuickSort(int left,int right){
if(right-left<=0)
//若right<=left .表明排序结束
return;
else
{
double pivot=theArry[right];//获取最右元素值
//以最右的元素为轴,划分左右范围
int partition =partitionIt(left,right,double pivot);
recQuickSort(left,partition-1);//对partition左边的元素进行排序
recQuickSort(partition+1,right);//对partition右边的元素进行排序

}
}
//总体思想:找到最左边pivot大的元素,最右边比pivot小的元素,交换这两个元素
//循环进行以上工作,直至左右下标重叠
public int partitionIt(int left,int right,double pivot){
int leftPtr=left-1;
int rightPtr=right;
while(true){
while(theArry[++leftPtr]<pivot)//找出pivot大的左边的元素
;
//找出pivot小的右边的元素
while(rightPtr>0&&theArry[--rightPtr]>pivot)
;
if(leftPtr>rightPtr)
//如果左下标大于右下标则结束
break;
else
swap(leftPtr,rightPtr);
return leftPtr;
}

}
//----------------------------------------------------------------
public void swap(int dex1,int dex2){
double temp=theArry[dex1];
theArry[dex1]=theArry[dex2];
theArry[dex2]=temp;
}
}
//对象QuickSortApp的声明如下所示
public class QuickSortApp{
public static void main(String[] args){
int maxSise=16;//数组长度
Sample5 arr;//声明对象
arr=new Sample5(maxSise);//利用构造函数创建数组
for(int j=0;j<maxSise;j++){
//利用Math函数random产生随机数,初始化数组
double n=(int)(java.lang.Math.random()*99);
arr.insert(arr);

}
arr.dispaly();
arr.quickSort();
arr.dispaly();
}
}
四、Arrays类的sort方法

1.sort方法常见的使用形式
publi ststic void sort(Xxx,a[]).a的类型可以是char/byte/short/int/long/float/double
2.sort方法还有另外一种常见的形式
public static void sort(Xxx a[],int fromIndex,int toIndex)
这种形式只对数组a指定范围内进行排序。不包括a[toIndex]。

五、数组的比较
Arrays类重载了equals()方法,用来比较整个数组。方法声明如下:
public static boolean equals[type[]a1,type[]a2].tyoe的类型可以是char/byte/short/int/long/float/double
数组相等的条件是两个元素个数必须相等,并且位置的元素还要相等。这可以通过对每一个元素使用equals()做比较来判断,对于基本类型,需要使用基本类型,如(int 对应的Intger类、char对应的是Character类)的equals()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: