排序方式

冒泡排序:

int temp;//定义一个临时变量
        for(int i=0;i<arr.length-1;i++){//冒泡趟数
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j+1]<arr[j]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }

选择排序:

  int[] arr={1,3,2,45,65,33,12};
        System.out.println("交换之前:");
        for(int num:arr){
            System.out.print(num+" ");
        }        
        //选择排序的优化
        for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
            int k = i;
            for(int j = k + 1; j < arr.length; j++){// 选最小的记录
                if(arr[j] < arr[k]){ 
                    k = j; //记下目前找到的最小值所在的位置
                }
            }
            //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            if(i != k){  //交换a[i]和a[k]
                int temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
            }    
        }
        System.out.println();
        System.out.println("交换后:");
        for(int num:arr){
            System.out.print(num+" ");
        }
    }

二分查找:

1.递归的方式:

/**
  * 使用递归的二分查找
  *title:recursionBinarySearch
  *@param arr 有序数组
  *@param key 待查找关键字
  *@return 找到的位置
  */
 public static int recursionBinarySearch(int[] arr,int key,int low,int high){
  
  if(key < arr[low] || key > arr[high] || low > high){
   return -1;    
  }
  int middle = (low + high) / 2;    //初始中间位置
  if(arr[middle] > key){
   //比关键字大则关键字在左区域
   return recursionBinarySearch(arr, key, low, middle - 1);
  }else if(arr[middle] < key){
   //比关键字小则关键字在右区域
   return recursionBinarySearch(arr, key, middle + 1, high);
  }else {
   return middle;
  } 
 }

2.while循环实现:

/**
  * 不使用递归的二分查找
  *title:commonBinarySearch
  *@param arr
  *@param key
  *@return 关键字位置
  */
 public static int commonBinarySearch(int[] arr,int key){
  int low = 0;
  int high = arr.length - 1;
  int middle = 0;   //定义middle
  
  if(key < arr[low] || key > arr[high] || low > high){
   return -1;    
  }
  while(low <= high){
   middle = (low + high) / 2;
   if(arr[middle] > key){
    //比关键字大则关键字在左区域
    high = middle - 1;
   }else if(arr[middle] < key){
    //比关键字小则关键字在右区域
    low = middle + 1;
   }else{
    return middle;
   }
  }
  return -1;    //最后仍然没有找到,则返回-1
 }

3.测试代码:

public static void main(String[] args) {
 
  int[] arr = {1,3,5,7,9,11};
  int key = 4;
  //int position = recursionBinarySearch(arr,key,0,arr.length - 1);
  
  int position = commonBinarySearch(arr, key);
 
               if(position == -1){
   System.out.println("查找的是"+key+",序列中没有该数!");
  }else{
   System.out.println("查找的是"+key+",找到位置为:"+position);
  }
  }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、冒泡排序 这种排序方式是最容易理解的,主体思想就是: 指针重复地走访过要排序的数列,一次比较两个元素,如果他们...
    清阳_阅读 3,647评论 0 0
  • 1.选择排序将第0个位置元素与每一个元素进行比较,如果比第0个元素大,就交换位置 2.冒泡排序 3.二分查找法:前...
    字节码阅读 5,071评论 0 1
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 5,278评论 0 1
  • 今天下午4点50到中影国际太阳新天地看电影《绣春刀》。毫无疑问,是一部难得的好电影。个人认为聂远和金士杰演得最好,...
    HKirito阅读 1,724评论 0 1
  • 通过老师的介绍,我接触到许多有关电商的书籍,其中有《淘宝技术这十年》《场景革命》、《长尾理论》、《爆品战...
    966d143642dc阅读 4,099评论 0 1

友情链接更多精彩内容