归并排序:
public static void merge(int[] a,int min,int mid,int max) { int[] arr=new int[max-min+1];//定义新的空数组,长度与传入的数组长度一致 int x=min;//左边数组起始位置 int y=mid+1;//右边数组起始位置 int k=0;//设新数组的角标k,并从0开始 while(x<=mid&&y<=max) {//满足最小位置在中间位置以内或相等, //同时中间往后移一个的位置在最大位置以内或等于,就执行while循环 if(a[x]<=a[y]) {//左边的数组分别与右边的数组比较,若左边的对应元素小于右边的 //,将左边的这一元素加入新数组,左边数组元素依次往后与右边比较,若左边仍小于右边, //继续将左边元素加入新数组 arr[k++]=a[x++]; }else {//右边元素比左边小就将右边元素加入数组 arr[k++]=a[y++]; } } while(x<=mid){//将左边剩余的元素加入新数组 arr[k++]=a[x++]; } while(y<=max){//将右边剩余的元素加入新数组 arr[k++]=a[y++]; } for(int i=0;i<arr.length;i++){//将新数组里的元素加入原数组 a[i+min]=arr[i]; } } public static void mergesort(int[] a,int min,int max){ if(min<max){ int mid=(min+max)/2; mergesort(a,min,mid);//递归拆分数组左边 mergesort(a,mid+1,max);//递归拆分数组右边 merge(a,min,mid,max);//将拆分的数组有序排列 } } public static void main(String[] args) { int[] a= {1,4,12,32,31,34,58,3,23,5}; mergesort(a,0,a.length-1); System.out.println(Arrays.toString(a)); }
获取数组最值
int arr[] = 数组
int max= arr[0];
for(int i = 0;i < arr.length;i++){
if(arr[i] > (最小值反之)max){
max = arr[i];
}
}
System.out.println("数组arr最大值为:"+max);
选择排序
选择排序是一次和后面的元素进行比较,第一次比较得到最小值
for(int a=0;a<arr.length-1;a++){
for(int b=a+1;b<arr.length;b++){
if(arr[a]>arr[b]){
int temp=0;
temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
冒泡排序
一次比较两个元素,如果他们的顺序错误就把他们交换过来,最先获得最大值放右边
for(int a =0;a<arr.length-1;a++){//控制比较次数
for(int b=0;b<arr.length-1-a;b++){
if(arr[b]>arr[b+1]){
int c=0;
c=arr[b];
arr[b]=arr[b+1];
arr[b+1]=c;
}
}
}
System.out.println(Arrays.toString(arr));
数组的查找
一般查找:public int 函数名(int[] arr,int a){
for(int i = 0;i < arr.length;i++){
if(arr[i] == a){
return i;
}
}
return -1;数组的下标从0开始,-1代表没有找到,不存在此元素
}
二、折半查找
方法一:
public int 函数名(int[] arr,int a){
int start,end,mid;
start = 0;
end = arr.length - 1;
mid = (start+end)/2;
while(arr[mid] != a){
if(a > arr[mid]){
start = mid + 1;
}else{
end = mid - 1;
}
if(start > end){
return -1;
}
mid = (start+end)/2;
}
return mid;
}
优点:折半区间条件判断循环,运行运算步骤更短,优化
方法 二
public int 函数名(int[] arr,int a){
int start = 0,end = arr.length-1,mid;
while(start <= end){
mid = (end + start)/2;
if(a > arr[mid]){
start = mid + 1;
}else if(a < arr[mid]){
end = mid - 1;
}else{
return mid;
}
}
return -1;
}
封装方法:main方法{}之后,在类中的一段具有特定功能的小程序,可在main方法里调用