排序 查找


归并排序:

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方法里调用

posted on 2017-07-20 08:45  唐浩199  阅读(162)  评论(0)    收藏  举报

导航