記錄用C#寫折半查找演算法實現

来源:https://www.cnblogs.com/ZYPLJ/archive/2023/03/03/17175345.html
-Advertisement-
Play Games

折半查找演算法 前言 最近要考試了,重新回顧一下之前學的演算法,今天是折半查找,它的平均比較次數是Log2 n 思想 給定一個有序數組A[0..n-1],和查找值K,返回K在A中的下標。 折半查找需要指定3個指針,left、right、mid,分別是左指針指向下標0,右指針指向元素末尾,mid中間值指向 ...


折半查找演算法

前言

最近要考試了,重新回顧一下之前學的演算法,今天是折半查找,它的平均比較次數是Log2 n

思想

給定一個有序數組A[0..n-1],和查找值K,返回K在A中的下標。

折半查找需要指定3個指針,left、right、mid,分別是左指針指向下標0,右指針指向元素末尾,mid中間值指向(left+right)/ 2向下取整。

如果A[mid] > K,中間值大於要找的K值,移動right指針,right = mid - 1

如果A[mid] < k,中間值小於要找的K值,移動left指針,left = mid + 1

如果A[mid] == K,則返回 mid

演算法實現

public static void Main(string[] args){
    int[] A = {1,2,3,6,7,11,23,56};
    int K = 23;
    Console.WriteLine(Search(A,K));
}
public static int Search(int[] A,int K){
    int left = 0;
    int right = A.Length - 1;
    while(left <= right){
        int mid = (left + right) / 2;
        if(A[mid] == K){ return mid;}
        else if(A[mid]>K){
            right = mid - 1;
        }else{
            left = mid + 1;
        }
    }
    return -1;
}

結尾

有任何錯誤歡迎指正.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 TCP三次握手和四次揮手是面試題的熱門考點,它們分別對應TCP的連接和釋放過程 1.TCP通信包含那幾步? TCP通信過程包括三個步驟:建立TCP連接通道,傳輸數據,斷開TCP連接通道 上圖主要包括三部分:*建立連接、傳輸數據、斷開連接。* 建立TCP連接很簡單,通過三次握手便可建立連接。 建 ...
  • 1.單線程 單線程:只有一個線程,即CPU只執行一個任務(一個線程) 1 class Hero{ 2 String name; 3 Hero(String name){ 4 this.name = name; 5 } 6 public void show(){ 7 System.out.printl ...
  • #使用引用 #include <iostream> using namespace std; struct Time{ int h; int m; int s; }; void timeCompute(Time &t, int sec){ //引用作為形參 t.m = t.m + (t.s + se ...
  • Problem description unsigned char key[16] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; unsigned ...
  • 日常開發中,基於 Redis 天然支持分散式鎖,大家線上上分散式項目中都使用過 Redis 鎖。本文主要針對日常開發中加鎖過程中某些異常場景進行講解與分析。本文講解示例代碼都在 https://github.com/wayn111/newbee-mall-pro 項目 test 目錄下 RedisL ...
  • 程式代碼到可執行程式編譯鏈接過程 預編譯 以c++/c 語言為例,預編譯階段的工作有以下幾點: 處理所有#define 及條件預編譯指令(如 #if,#ifdef.....),並展開所有巨集定義。 刪除所有註釋("//" ,"/**/")。 處理 "#include",將被包含文件插入該預編譯指令位置 ...
  • 什麼是OpenAI https://openai.com OpenAI是一家人工智慧公司,成立於2015年,總部位於美國舊金山。該公司的使命是研究和開發能夠產生廣泛影響的人工智慧技術,並將這些技術傳播到整個社會。OpenAI由一些著名的科學家和企業家共同創立,包括伊隆·馬斯克、Sam Altman等 ...
  • 實現動態aop並註入 創建一個DynamicDispatchProxy類繼承DispatchProxy, public class DynamicDispatchProxy<T> : DispatchProxy { /// <summary> /// 目標類 /// </summary> priva ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...