首页 > 其他 > 详细

用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据+ 冒泡排序(例子)

时间:2014-03-20 15:35:46      阅读:664      评论:0      收藏:0      [点我收藏+]

/**

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

 *

 * 基本思想:

 *

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

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

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

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

 *

 * @author Administrator

 *

 */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 - 1; i++)
        {
            for (int j = 0; j < a.length - 1 - i; j++)
            {
                int tmp = 0;
                if (a[j] > a[j + 1])
                {
                    tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = 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;
    }
 
}

  

 

用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据+ 冒泡排序(例子),布布扣,bubuko.com

用折半查找法在一组排好序(递增有序或递减有序)的值中查找某个数据+ 冒泡排序(例子)

原文:http://www.cnblogs.com/qqzy168/p/3613540.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!