Java实现冒泡排序、折半查找

1、冒泡排序

public class BubbleSort{
      public static void main(String[] args){
          int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
          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("第" + (i + 1) + "次排序结果:");
              for(int a = 0; a < score.length; a++){
                  System.out.print(score[a] + "\t");
              }
              System.out.println("");
          }
              System.out.print("最终排序结果:");
              for(int a = 0; a < score.length; a++){
                  System.out.print(score[a] + "\t");
         }
      }
  } 

2、折半查找

public class BinarySearch {
    /**
    * 二分查找算法
    *
    * @param srcArray 有序数组
    * @param key 查找元素
    * @return key的数组下标,没找到返回-1
    */
    public static void main(String[] args) {
        int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
        System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 81));
    } 

    // 二分查找递归实现
    public static int binSearch(int srcArray[], int start, int end, int key) {
        int mid = (end - start) / 2 + start;
        if (srcArray[mid] == key) {
            return mid;
        }
        if (start >= end) {
            return -1;
        } else if (key > srcArray[mid]) {
            return binSearch(srcArray, mid + 1, end, key);
        } else if (key < srcArray[mid]) {
            return binSearch(srcArray, start, mid - 1, key);
        }
        return -1;
    } 

    // 二分查找普通循环实现
    public static int binSearch(int srcArray[], int key) {
        int mid = srcArray.length / 2;
        if (key == srcArray[mid]) {
            return mid;
        }   

        int start = 0;
        int end = srcArray.length - 1;
        while (start <= end) {
            mid = (end - start) / 2 + start;
            if (key < srcArray[mid]) {
               end = mid - 1;
            } else if (key > srcArray[mid]) {
                start = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
} 

计算中间位置使用:

int mid = (end - start) / 2 + start;

防止加法运算时可能导致的整数越界

时间: 2024-08-29 11:33:54

Java实现冒泡排序、折半查找的相关文章

01. Java的经典排序--选择排序--冒泡排序--折半查找(二分查找)

Java的经典排序--选择排序--冒泡排序--折半查找 选择排序 选择排序 3 2 1 5 8 0 1 3 2 5 8 1 1 2 3 5 8 2 1 2 3 5 8 3 1 2 3 5 8 public static void main(String[] args) { int[] arr={3,2,1,5,8}; selectSort(arr); for(int i = 0 ; i < arr.length ; i ++){ System.out.println(arr[i]) ; } }

选择排序&amp;冒泡排序&amp;折半查找

//选择排序 void test2(int a[],int len){ //每次找出一个最小值,最小值依次与原数组交换位置,通过下标来完成交换,最小值下标每次都在变,变量存储 //    假如第一个是最小值 int mine=0; int teamp=0; //    外层负责趟数 for (int i=0; i<len; i++) { //    假如每一次的第一个是最小值 mine=i; //    内层负责寻找每趟的最小值 //        每次起始比较值都不一样所以j=i+1,改变次数

C语言数组之冒泡排序+折半查找法(二分查找)

冒泡排序算法 1 int num[5]; 2 int i; 3 //循环接收用户输入的元素 4 for(i=0;i<5;i++){ 5 printf("请输入第%d个元素\n",i+1); 6 scanf("%d",&num[i]); 7 } 8 for(i=0;i<4;i++){ //外层循环,控制排序的轮数 9 int j; 10 for(j=0;j<4-i;j++){ //内层循环,控制冒牌排序每轮的次数 11 if(num[j]&g

【算法数据结构Java实现】折半查找

1.背景 以一个题目为例,一个整数x是一组按大小顺序排列好的数列中的一个数,我们要找到x在数列中的索引位置. 比如按从小到大排列的数列: -3,-2,0,4,5,7,12,64 我们要找到数字7的位置,如果是线性查找,时间复杂度是O(n),如果用折半查找的话,时间复杂度是O(log(n)),因为每次折半,计算量少一半,所以取对数. 2.代码 package Algorithm_analysis; public class Bisearch { static int[] array={-3,-2,

Java习题(选择,冒泡排序,折半查找)

解决问题如下: 1.求1+2!+3!+...+20!的和. 2.获取数组中的最大和最小值. 3.对数组进行选择排序.冒泡排序. 4.在数组中查找某个数的位置(折半查找). 折半查找:      适合顺序表的查找,数组中存的是按顺序排列的元素,方法如下:定义变量low,mid,high分别指向数组中的最低位,中间和最高位的元素:比较要查找的元素和mid指向的元素,如果比mid大,则在mid和high之间继续查找,low=mid+1; 否则在low和mid之间继续查找,high=mid-1.直到lo

java 折半查找 冒泡排序 选择排序

更多查找可以参考 http://www.cnblogs.com/liuling/p/2013-7-24-01.html 这是别人的资源,感觉写的很全.可以仔细研究一下. /* 使用折半查找的前提是数据是有序(升序)的. */ class HalfSearchDemo { public static void main(String[] args) { int[] arr={1,2,3,6,2,3,5,1,8,9,3,5,2}; sop("关键字的位置:"+halfSearch_2(ar

选择排序和冒泡排序以及折半查找

1.选择排序 2.冒泡排序 3.折半查找 方式一:开发使用的方法 方式二:普通的折半

java之折半查找

//功能:二分查找import java.util.*; public class Demo1 {    public static void main(String[] args) {      int arr[]={2,5,7,12,25};//定义arr数组并赋值      System.out.print("请输入你需要查找的数:");      Scanner sr=new Scanner(System.in);      int a=sr.nextInt();      B

Java实现折半查找(二分法)

利用Java实现折半查找 基本思路:while递归循环,不断判断a[middle]是否等于data,如果等于则跳出循环,返回索引值,如果不等,则进行二分处理,直至两者相等为止:其中通过count计数器记录查找次数,当count次数超过20次时视为元素不存在(此处有待优化) package test; /* * 二分法查找(折半查找) * TGmoving * */ public class halfSearch { public static int HalfSearch(int a[],int