内容:一维数组、排序与查找、多维数组,二进制、位运算、移位运算符
目标:
1.掌握java中的数组的使用
2.掌握java中常用的排序方法
一维数组
int a[] = new int[6]; 或者 int[] a = new int[6]
对象数组
需要new两次:如
Dog dogs[] = new Dog[6];//此时的dog[i] = null
dogs[i] = new Dog();
比较字符串内容是否相等时,用equals方法(String提供),不能使用==
小结
排序
1.内部排序:指需要处理的所有数据都加载到内部存储器中进行的排序
包括 交互式排序法、选择式排序法和插入式排序法
2.外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序
包括 合并排序法和直接合并排序法
一般数据处理工作的25%的时间都在进行排序
交互式排序
1.冒泡排序法(Bubble sort)
2.快速排序法(Quick sort)
选择式排序法
1.选择排序法
2.堆排序
插入式排序法
1.插入排序(Insertion sort)
2.希尔排序(shell sort)
3.二叉树排序法(Binary-tree sort)
排序java代码
简单排序法java/*
* 演示简单的排序法
* */
package test1;
public class Demo5_3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// int arr[]={1,-6,20,2};
int len = 40000;
int arr[] = new int[len];
//随机产生len个大小介于0~10000的数
for(int i=0; i<len; i++)
{
//Math.random()生成的是0~1的随机数
arr[i] = (int)(Math.random()*10000);
}
Bubble bubble = new Bubble();
Select select = new Select();
InsertSort insert = new InsertSort();
//计算冒泡排序的运行时间
long startTime = System.currentTimeMillis();
bubble.sort(arr);
long endTime = System.currentTimeMillis();
System.out.println("The bubble sort " +
"running time is:"+(endTime-startTime)+"ms");
//计算选择排序的运行时间
startTime = System.currentTimeMillis();
select.sort(arr);
endTime = System.currentTimeMillis();
System.out.println("The select sort " +
"running time is:"+(endTime-startTime)+"ms");
//计算插入排序的运算时间
startTime = System.currentTimeMillis();
insert.sort(arr);
endTime = System.currentTimeMillis();
System.out.println("The insert sort " +
"running time is:"+(endTime-startTime)+"ms");
}
}
//插入排序
class InsertSort
{
//插入排序方法
public void sort(int arr[])
{
for(int i=1; i<arr.length; i++)
{
int insertVal = arr[i];
//insertVal准备和i前面的值比较
int index = i-1;
//将第i个数插入按从小到大的顺序插入到0~i-1个数中去
while( index >= 0 && insertVal < arr[index])
{
//把arr[index]向后移动
arr[index+1] = arr[index];
//index前移
index--;
}
//insertVal被插入到合适的位置
arr[index+1] = insertVal;
}
}
}
//选择排序方法
class Select
{
public void sort(int arr[])
{
int temp = 0;
//插入排序算法:将第i个数依次与其后面的数做比较,和较小的数互换
for(int i=0; i<arr.length; i++)
{
int minVal = arr[i];
for(int j=i+1; j<arr.length; j++)
{
if(arr[j]<minVal)
{
temp = arr[j];
arr[j] =minVal;
minVal =arr[j];
}
}
}
}
}
//冒泡排序方法
class Bubble
{
public void sort(int arr[])
{
int temp = 0;
//冒泡排序:将每一轮的最大值依次往后移动
for(int i=0; i<arr.length-1; i++)
{
//求前面未排序的数较大的值并依次向后移动
for(int j=0; j<arr.length-1-i; j++)
{
//较大的值往后面交换
if(arr[j]>arr[j+1])
{
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
}
}
查找
1.顺序查找
2.二分查找
二分查找java/*
* java演示二分查找
* */
package test1;
public class Demo5_4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = {2,5,7,10,15};
BinaryFind bf = new BinaryFind();
bf.find(0, arr.length, 10, arr);
}
}
class BinaryFind
{
public void find(int leftIndex, int rightIndex,int val, int arr[])
{
//首先找到中间的数
int middleIndex = (leftIndex + rightIndex)/2;
int midVal = arr[middleIndex];
if(rightIndex >= leftIndex)
{
//如果要找的数比midVal大
if(midVal < val)
{
find(leftIndex+1,rightIndex,val,arr);
}
else if(midVal > val)
{
find(leftIndex,rightIndex-1,val,arr);
}
else
{
System.out.println("val finded,its index is:"+middleIndex);
}
}
}
}
递归算法演示:
多维数组-二维数组
int a[][] = new int[2][3];