数组和快速排序


一、数组
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()方法。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值