课后作业07--二分法查找算法代码

            Console.Write("请输入数组的长度:");
            int k = int.Parse(Console.ReadLine());
            int[] arr1 = new int[k];
            Console.Write("数组包含值依次为:");
            for (int i = 0; i < k; i++)//数组赋值
            {
                Random rd = new Random();
                int j = rd.Next(100);
                Thread.Sleep(200);
                arr1[i] = j;
                Console.Write(j + " ");
            }
            int s;

            Console.Write("\n您要查找的数为: ");
            try
            {
                s = Convert.ToInt32(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("您输入有误!请按回车退出");
                Console.ReadLine();
                return;
            }
            Console.WriteLine("数组从小到大排列:");
            //数组排序
            for (int i = k - 1; i > 0; i--)
            {
                for (int j = 0; j <= k -2; j++)
                {
                    if (arr1[j] > arr1[j + 1])
                    {
                        int m = arr1[j];
                        arr1[j] = arr1[j + 1];
                        arr1[j + 1] = m;
                    }
                }
            }
            for (int i = 0; i <= k -1; i++)
            {
                Console.Write(arr1[i] + " ");
            }
            int a = 0, b = k -1;
            while (arr1[(a + b) / 2] != s)//二分法
            {
                if (arr1[a] == s || arr1[b] == s || b - a == 1)
                    break;

                while (arr1[(a + b) / 2] > s)
                {
                    if (arr1[b] == s )
                        break;
                    b = (a + b) / 2;
                }
                while (arr1[(a + b) / 2] < s)
                {
                    if (arr1[a] == s || b - a == 1)//当输入数组不含有的数字,利用b-a判断可跳出循环
                        break;
                    a = (a + b) / 2;
                }
            }
            if (arr1[(a + b) / 2] == s)
                Console.Write("\n您查找的数是数组的第" + ((a + b) / 2 + 1) + "位!");
            else if (arr1[a] == s)
                Console.Write("\n您查找的数是数组的第" + (a + 1) + "位!");
            else if (arr1[b] == s)
                Console.Write("\n您查找的数是数组的第" + (b + 1) + "位!");
            else
                Console.Write("\n您输入的数字不存在!");
            Console.ReadLine();
时间: 2024-10-09 14:01:39

课后作业07--二分法查找算法代码的相关文章

Java中的二分法查找算法

[ 什么是二分查找 ]  二分查找又称为折半查找,该算法的思想是将数列按序排列,采用跳跃式方法进行查找,即先以有序数列的中点位置为比较对象, 如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分.以此类推不断缩小搜索范围. [ 二分查找的条件 ] 二分查找的先决条件是查找的数列必须是有序的. [ 二分查找的优缺点 ] 优点:比较次数少,查找速度快,平均性能好: 缺点:要求待查数列为有序,且插入删除困难: 适用场景:不经常变动而查找频繁的有序列表. [ 算法步骤描述 ] ①

Java 实现二分法查找算法

算法 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2. 1.开始令front=0(指向3),end=7(指向88),则mid=3(指向36).因为mid>x,故应在前半段中查找. 2.令新的end=mid-1=2,而front=0不变,则新的mid=1.此时x>mid,故确定应在后半段中查找. 3.令新的front=mid+1=2,而end=2不变,则新的mid

课后作业08 -- 二分查找法 (课后修改)

int[] arr1 = new int[] { 1, 3, 4, 5, 6, 9, 13, 25, 36, 45, 67 ,79}; foreach (int i in arr1) Console.Write(i + " ");//遍历数组 Console.WriteLine(" \n数组长度为:" + arr1.Length + "\n请输入要查找的数字:"); int num; try { num = Convert.ToInt32(Con

二分法查找算法

package SuanFa; import java.text.SimpleDateFormat; import java.util.Date; public class Demo1 { public static void main(String []args){ int []arr={1,3,5,7,9,11,12,13,15,16,18,19,20}; int a=rank(100,arr); System.out.println(a); System.out.println(new S

2019.12.07 二分法查找二维数组

/** * BinarySearch.java * com.oracle.array * * Function: TODO * * ver date author * ────────────────────────────────── * 2019年12月5日 17671 * * Copyright (c) 2019, TNT All Rights Reserved.*/ package com.oracle.array;/** * ClassName:BinarySearch * Funct

I学霸官方免费教程二十九:Java查找算法之二分法查找

二分法查找算法 基本步骤:    第一步:获取数组中间的下标    第二步:中间下标处的值和目标值比较,如果目标值大,说明要找的值在数组的后边一半中    第三步:再次获取数组右边一半的中间下标    第四步:再次用获得的中间下标和目标值进行比较    后续步骤以此类推,这样每次查找都在"半份"数据中进行,所以又叫折半查找.这也是为什么使用二分法查找之前必须要对数组进行排序的原因.如果不排序,将无法判断目标值在哪"半份"中 实例: package algorithm

JAVA第三周课后作业

JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t);  // //是原始数据类型吗? System.out.println(s.getClass().isPrimi

查找算法系列之复杂算法:哈希查找

眼下为止已经介绍了顺序查找.二分查找.分块查找.二叉排序树.见作者之前的文章: http://blog.csdn.net/u010025211/article/details/46635325 http://blog.csdn.net/u010025211/article/details/46635183 今天这篇博文将介绍哈希查找. 1.为什么要用哈希查找 之前所讲的查找方法都是须要比較待查找元素与线性表或者树中的元素才干实现. 这种时间复杂度为O(n)或者O(log n),那么有没有可能当给

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

原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功:若x小于当前位置值,则在数列的前半段中查找:若x大于当前位置值则在数列的后半段中继续查找,直到找到为止. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //针对int类型数组的二分法查找,key为要查找数的下