JavaSE基础数组排序

来源:互联网 发布:淘宝设计美工招聘 编辑:程序博客网 时间:2024/06/08 09:04

1.选择排序

package zst.org.arrays;/**选择排序: * 从零索引开始,用它对应的元素依次和后面的索引对应的元素进行比较,小的往前放第一次比较完毕,最小值出现在最小索引处 * 依次这样比较就可以得到一个排好序的数组。 * @author:zsyht * @date:2017-11-6上午10:36:17 */public class Selectsort {public static void main(String[] args) {int [] arr ={94,82,65,39,18};System.out.print("排序前的数组:");printArray(arr);/*//第一次比较    int x = 0;    for(int y=x+1;y<arr.length;y++){if(arr[y]<arr[x]){  //后面的索引对应的元素小于前面索引对应的元素int temp=arr[x];arr[x]=arr[y];arr[y]=temp;}    }      System.out.print("第一次比较结果:");    printArray(arr);    //第二次比较    x =1;    for(int y=x+1;y<arr.length;y++){    if(arr[y]<arr[x]){    int temp=arr[x];arr[x]=arr[y];arr[y]=temp;    }    }    System.out.print("第二次比较结果:");    printArray(arr);    //第三次比较    x=2;    for(int y=x+1;y<arr.length;y++){    if(arr[y]<arr[x]){    int temp=arr[x];arr[x]=arr[y];arr[y]=temp;    }   }    System.out.print("第三次比较结果:");    printArray(arr);    x = 3;    for(int y=x+1;y<arr.length;y++){if(arr[y]<arr[x]){  //后面的索引对应的元素小于前面索引对应的元素int temp=arr[x];arr[x]=arr[y];arr[y]=temp;}    }      System.out.print("第四次比较结果:");    printArray(arr);*///重复度高 代码臃肿,循环改进for(int x =0;x<arr.length-1;x++){for(int y =x+1;y<arr.length;y++){if(arr[x]<arr[y]){int temp=arr[x];arr[x]=arr[y];arr[y]=temp;}}}System.out.print("排序后的数组:");printArray(arr);}public static void printArray(int []arr){System.out.print("[");    for(int x=0;x<arr.length;x++){       if(x==arr.length-1){System.out.print(arr[x]+"]");   }else {System.out.print(arr[x]+",");}}    System.out.println();    }}


2.二分查找

package zst.org.arrays;/**二分查找 * 必须是一个有序的数组 * @author:zsyht * @date:2017-11-6下午9:44:46 */public class binarySearch {public static void main(String[] args) {int [] arr = {11,22,33,44,55,66,77};int index =getIndex(arr,33);System.out.println("要查找的元素对应的索引为:"+index);int index2 =getIndex(arr,456);System.out.println("要查找元素对应的索引为:"+index2);}//二分查找方法public static int getIndex(int[]arr,int value){int min = 0;int max = arr.length-1;int mid = (min+max)/2;//不知道循环次数用whlie循环while(arr[mid]!=value){//arr[mid]不等于value分两种情况if(arr[mid]>value){max=mid-1; }else if(arr[mid]<value){min=mid+1;}//如果没有符合的元素,索引返回-1if(min>max){return -1;}mid = (max+min)/2; //重新计算mid}return mid;  //如果arr[mid]=value,直接返回mid}}