zoukankan      html  css  js  c++  java
  • 用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据+ 冒泡排序+选择排序+数组排序(例子)

    /**

     * 二分法 :用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据。

     *

     * 基本思想:

     *

     * 首先将待查数据k与排好序(递增有序)的一组数据的中间位置上的数据进行比较, 若相等,则查找成功;

     * 若k>a[mid],则待查数据k只可能出现在右半部a[mid+1…n]中,则应在这个右半部中再进行折半查找;

     * 若k<a[mid],则待查数据k只可能出现在左半部a[1…mid-1]中,则应在这个左半部中再进行折半查找;

     * 这样通过逐步缩小查找范围,直到找到或找不到该数据k为止。

     *

     * @author Administrator

     *

     */

    package com.my.test;
    
    import java.util.Arrays;
    
    public class CTest {
    
        public static void main(String[] ss) 
        {
            int[] a = { 3, 4, 2, 8, 6, 0, 7, 5, 9, 1 };
    
            System.out.println("原  数   组: " + Arrays.toString(a));
    
            Arrays.sort(a);
            System.out.println("集合排序: " + Arrays.toString(a));
    
            // 冒泡排序
    for (int i = 0; i < a.length; i++) 
            {
                for (int j = i + 1; j < a.length - i; j++) 
                {
                    int tmp = 0;
                    if (a[i] > a[j]) 
                    {
                        tmp = a[j];
                        a[i] = a[j];
                        a[j] = tmp;
                    }
                }
            }
            System.out.println("冒泡排序: " + Arrays.toString(a));
            
            
            //选择排序
            int[] c = { 3, 4, 2, 8, 6, 0, 7, 5, 9, 1 };
            int tmp = 0;
            for (int i=0;i<c.length-1;i++)
            {
                int lowIndex = 0; //找出最小的一个索引
                for (int j=i+1;j<c.length-1;j++)
                {
                    if (c[i]>c[j])
                    {
                        lowIndex = j;
                    }
                }
                //交换
                tmp = c[i];
                c[i] = c[lowIndex];
                c[lowIndex] = tmp;
            }
            System.out.println("选择排序: " + Arrays.toString(a));
            
            // 测试二分法查找
            int[] b = { 1, 3, 5, 7, 9, 12, 13, 15 };
    
            System.out.println(BinarySearch(b, 9));
    
        }
    
        /**
         * 
         * @Title: 二分法查找
         * @Description: TODO
         * @param a
         * @param key
         * @return int
         */
        public static boolean BinarySearch(int[] Data, int KeyValue) 
        {
            int Left = 0; // 左边界变量
            int Right = 0; // 右边界变量
            int Middle; // 中位数变量
    
            while (Left <= Right) 
            {
                Middle = (Left + Right) / 2;
                if (KeyValue < Data[Middle]) // 查找值比中间值小
                {
                    Right = Middle - 1; // 查找前半段
                } 
                else if (KeyValue > Data[Middle])// 查找值比中间值大
                {
                    Left = Middle + 1; // 查找后半段
                }
                else if (KeyValue == Data[Middle]) // 查找到数据
                {
                    System.out.println("Data[" + Middle + "] = " + Data[Middle]);
                    return true;
                }
            }
            return false;
        }
    
    }
     
  • 相关阅读:
    实体机可以ping通虚拟机,虚拟机ping不通实体机
    实体机可以ping通虚拟机,虚拟机ping不通实体机
    eclipse快捷键
    eclipse快捷键
    利用信号捕捉函数回收子进程
    进程间通信_信号
    进程间通信_管道
    创建子进程
    系统编程入门
    JPG库移植与使用
  • 原文地址:https://www.cnblogs.com/qqzy168/p/3613540.html
Copyright © 2011-2022 走看看