public static void main(String[] args) {
      // bubbleSort();
  // int[] a = {20,2,10,8,12,17,4,25,11,6,33,13,24};
  // int start = 0;
  // int end = a.length-1;
  // sort(a,start,end);
  // for(int i = 0; i<a.length; i++){
  // System.out.print(a[i]+",");
  // }
  // choseSort();
  // nsertSort();
  // sequential();
  binarySearch();
}
/**冒泡排序*/
public static void bubbleSort(){
  int[] score = {20,2,10,8,12,17,4,25,11,6,33,13,24};
  //冒泡排序
  for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
    for(int j = 0 ;j < score.length - i - 1; j++){
    //对当前无序区间score[0......length-i-1]进行排序
    //(j的范围很关键,这个范围是在逐步缩小的)
      if(score[j] > score[j + 1]){ //把小的值交换到后面
        int temp = score[j];
        score[j] = score[j + 1];
        score[j + 1] = temp;
      }
    }
  }
  System.out.print("最终排序结果:");
  for(int a = 0; a < score.length; a++){
    System.out.print(score[a] + ",");
  }
}
/**快速排序*/
public static void sort(int[] a,int low,int high){
  int start = low;
  int end = high;
  int key = a[low];

  while(end>start){
  //从后往前比较
    while(end>start&&a[end]>=key) //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
      end--;
      if(a[end]<=key){
        int temp = a[end];
        a[end] = a[start];
        a[start] = temp;
      }
      //从前往后比较
      while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
        start++;
        if(a[start]>=key){
        int temp = a[start];
        a[start] = a[end];
        a[end] = temp;
      }
    //此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
    }
    //递归
    if(start>low) sort(a,low,start-1);//左边序列。第一个索引位置到关键值索引-1
    if(end<high) sort(a,end+1,high);//右边序列。从关键值索引+1到最后一个
}
/**选择排序*/
public static void choseSort(){
  int[] toBeSorted = {20,2,10,8,12,17,4,25,11,6,33,13,24};

  for(int i = 0; i < toBeSorted.length; i++){
    for(int j = i+1; j < toBeSorted.length; j++){
      if(toBeSorted[i] > toBeSorted[j]){
        int temp = toBeSorted[i];
        toBeSorted[i] = toBeSorted[j];
        toBeSorted[j] = temp;
      }
    }
  }

  for(int i = 0; i <toBeSorted.length; i++){
  System.out.print(toBeSorted[i]+",");
  }

}
/**插入排序*/
public static void nsertSort(){
  int[] arr = {20,2,10,8,12,17,4,25,11,6,33,13,24};
  int i, j;
  int n = arr.length;
  int target;
  //假定第一个元素被放到了正确的位置上
  //这样,仅需遍历1 - n-1
  for (i = 1; i < n; i++){
    j = i;
    target = arr[i];
    while (j > 0 && target < arr[j - 1]){
      arr[j] = arr[j - 1];
      j--;
    }
    arr[j] = target;
  }
  for(int a = 0; a < arr.length; a++){
    System.out.print(arr[a] + ",");
  }
}

/**顺序查找*/
public static void sequential(){
  int[] arr = {20,2,10,8,12,17,4,25,11,6,33,13,24};
  int key = 6;
  for(int i=0;i<arr.length;i++){
    if(key == arr[i]){
      System.out.print("第"+(i+1)+"个");
    }
  }
}
/**折半查找*/
public static void binarySearch(){
  int[] arr = {20,2,10,8,12,17,4,25,11,6,33,13,24};
  int low = 0;
  int high = arr.length - 1;
  int key = 6;

  while ((low <= high) && (low <= arr.length - 1)
      && (high <= arr.length - 1)) {
    int middle = (high + low) >> 1;
    if (key == arr[middle]) {
      System.out.print("第"+(middle+1)+"个");
      break;
    } else if (key < arr[middle]) {
      high = middle - 1;
    } else {
      low = middle + 1;
    }
  }
}

Java常用的排序查找算法的更多相关文章

  1. Java数据结构 遍历 排序 查找 算法实现

    请查看:http://blog.csdn.net/zhanghao_hulk/article/details/35372571#t13

  2. 常用的STL查找算法

    常用的STL查找算法 <effective STL>中有句忠告,尽量用算法替代手写循环:查找少不了循环遍历,在这里总结下常用的STL查找算法: 查找有三种,即点线面: 点就是查找目标为单个 ...

  3. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

  4. Java学习之二分查找算法

    好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...

  5. Java实现的二分查找算法

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

  6. javascript排序 查找算法大全

    在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...

  7. java基础---数组的查找算法(2)

    一.查找的基本概念 查找分为有序查找和无序查找,这里均以数组为对象,有序查找指的是数组元素有序排列,无序查找指的是数组元素有序或无序排列 平均查找长度(Average Search Length,AS ...

  8. 深入JDK源码之Arrays类中的排序查找算法(转)

    原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...

  9. Java常用的排序算法三

    Merge Sort :归并排序:用递归的思想,分解成单个元素的排序,在归并 代码: import java.util.*; public class MergeSort { public stati ...

随机推荐

  1. Python开发【1.1 基础语法】

    1.Python语言特点 优点: ①.丰富的库 ②.简单.开源 ③.支持面向对象编程 ④.解释性语言,无需编译 ⑤.高层语言,不用考虑内存问题 ⑥.可移植性好,不依赖于操作系统 缺点: ①.运行效率较 ...

  2. php截取某二个特殊字符串间的某段字符串

    在php开发的过程中,有时候会用到截取某二个特殊字符串间的某个字符串,并对这个字符串做特殊的处理,那么对截取出来的字符串做什么特殊处理我们临时无论.我们今天先讲php截取某二个特殊字符串间的某个字符串 ...

  3. iOS7获取UUID以及转换MD5

    近期项目开发,运用到要获取UUID转MD5,可是iOS7不能使用获取的UDID的接口(涉及到隐私),获取MAC地址的方式的接口在iOS7下也废弃了.眼下可能的就是获取UUID了,可是在iOS7下,UU ...

  4. 堆排序C++实现

    //heap sort //堆排序能够分为两个过程.其一是建堆.其二是出堆 //堆是一种全然二叉树,所以它能够用数组进行存储. //堆可分为最大堆和最小堆.最大堆指任一节点的值都大于其左右孩子节点的值 ...

  5. 【bzoj4401】块的计数

    首先,块的大小确定的话,可以发现方案最多只有1种 然后就可以O(nsqrt(n))搞,不过会TLE 接着我们又发现,一个节点可以作一个块的根,当且仅当该节点的size能被块的大小整除 然后就可以O(n ...

  6. 【Selenium】软件测试基础(软件测试分类和工具组)firebug、firepath的安装

    白盒测试:需要了解内部结构和代码 黑盒测试:不关心内部结构和代码 灰盒测试:介于白盒黑盒之间 静态测试:测试时不执行被测试软件 动态测试:测试时执行被测试软件 单元测试:测试软件的单元模块 集成测试: ...

  7. SPOJ:Just One Swap(统计&思维)

    You are given an array of size N. How many distinct arrays can you generate by swapping two numbers ...

  8. BZOJ_3881_[Coci2015]Divljak_AC自动机+dfs序+树状数组

    BZOJ_3881_[Coci2015]Divljak_AC自动机+dfs序+树状数组 Description Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是 ...

  9. linux内存管理之uboot第一步

    在进入讲解linux内存管理的kernel阶段以前,了解一下uboot阶段是如何准备好内存物理设备的,这是非常有意义的.通常进入到linux内核阶段之后,对内存芯片的物理特性寄存器访问是比较少的,强调 ...

  10. JAVA JVM 流程二

    作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚 ...