数组和快速排序
2015-07-05 20:27
281 查看
一、数组
1.数组的声明。两种形式:1.类型标识符[] 数组名,int[] a;2.类型标识符 数组名[],int []a。一个数组可以声明语句可以多个数组变量 int[] a,b,c;
使用数组的第二步是为数组分配内存,实际创建数组。java中的内存分配操作使用new操作,符格式:数组名=new 类型标识符[整型表达式];
代码演示:
eg:int a[][]=new int[2][3];
1.复制数组,使用系统方法arraycopy,可以有效的复制,需要五个参数:public static void arraycopy(Object source,int
srcIndex,Object dest,int destindex,int length)。
搜索数组。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。。
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()方法。
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()方法。
相关文章推荐
- 谁会拥有我们的“脸”?
- 《程序员的自我修养》读书笔记5
- 2、es索引创建及查询
- UVA10410 TreeReconstruction 树重建 (dfs,bfs序的一些性质,以及用栈处理递归 )
- Struts2框架学习(二) Action
- 1、Elasticsearch安装
- 令人失望!iPhone 6S仍将保留上一代最弱功能
- Matlab应用实例(4)—linprog(01基础)
- HDU 2851 dp 与 dijkstra
- 阿里云搭建apache+vsftpd
- Struts2框架学习(一)
- JS操作iframe
- linux ssh 问题记录
- xshell的上传和下载命令
- RAID损坏后 对数据的完整备份
- 红黑树
- 系统安装教程详细版
- spring框架学习(六)AOP
- Linq查询简介
- 过滤器Filter