數據結構 6(算法)

一、算法

1、概念

問題的求解方法

2、算法的特性和設計要求

算法的特性:

確定性? ? ? ? 有窮性? ? ? ? 輸入輸出? ? ? ? 可行性

設計要求:

正確性? ? ? ? 高效性????????低存儲????????健壯性? ? ? ? 可讀性

3、時間復雜度O(n)

用于評估程序執行所需的時間

O(n)記法:? ? ? ? 只保留最高階部分

例題:

?

?4、快速排序

思想:

? ? ? ? 每次取待排序中的一個元素作為基準,將序列分為比基準大和比基準小兩個部分

? ? ? ? 再分對這兩個部分別進行快速排序,直到每個部分都只有一個元素時,結束快速排序

#include <stdio.h>
//一次快排需要返回最后基準的位置
int one_sort(int *p,int low,int high)
{int base = *(p+low);while(high>low){//high一側的數據比基準更大while(*(p+high)>=base&&high>low){high--;}*(p+low) = *(p+high);while(*(p+low)<=base&&high>low){low++;}*(p+high) = *(p+low);}*(p+low)=base;   //將基準放在中間位置return low;
}
void sort(int *p,int low,int high)
{int ret;if(high>low)   //說明序列中不止一個元素{ret = one_sort(p,low,high);sort(p,low,ret-1);sort(p,ret+1,high);}
}
int main(int argc, const char *argv[])
{int arr[]={50,36,66,76,36,12,25,95};sort(arr,0,sizeof(arr)/sizeof(int)-1);for(int i=0;i<sizeof(arr)/sizeof(int);i++){printf("%d\n",arr[i]);}return 0;
}

?5、直接插入排序

思想:

? ? ? ? 假定序列中的元素有序(只有一個元素時,序列一定時有序的),將其他的元素插入到已經排好的序列中并排序。

#include <stdio.h>
void insert_sort(int *p,int len)
{int i,j,temp;//外層循環獲取要插入的每一個元素for(i=1;i<len;i++){//把每次要插入的數據保存temp = p[i];//內層循環找到元素應該插入的位置//因為是順序結構,插入的同時需要保證其他數據不變//需要將插入位置后面的元素后移//后移的就是比我插入元素更大的數for(j=i;j>0&&p[j-1]>temp;j--){p[j] = p[j-1];}//退出循環說明找到了要插入的位置p[j] = temp;}
}
int main(int argc, const char *argv[])
{int arr[]={50,36,66,76,36,12,25,95};int len = sizeof(arr)/sizeof(arr[0]);insert_sort(arr,len);for(int i=0;i<len;i++){printf("%d\n",arr[i]);}return 0;
}

二、查找算法

根據給定關鍵字,在序列中查找該關鍵字的操作

1、二分查找(條件:數列有序)

思想:

????????每次都使用序列中的中間值和給定的關鍵字比較,

????????中間值比關鍵字更大就去比中間值更小的一側查找,

? ? ? ? 中間值比關鍵字更小就去比中間值更大的一側查找。

#include <stdio.h>
int half_search(int *p,int start,int end,int key)
{int mid;//查找算法,即使只有一個數也要判斷while(end>=start){//找到中間值mid = (start+end)/2;   //中間值的下標if(p[mid]>key){end = mid-1;  //更新序列的終止位置}else if(p[mid]<key){start = mid+1;  //更新序列的起始位置}else if(p[mid]==key){return mid;}}
}
int main(int argc, const char *argv[])
{int arr[]={50,36,66,76,36,12,25,95};int len = sizeof(arr)/sizeof(arr[0]);printf("%d\n",half_search(arr,0,len-1,76));return 0;
}

2、哈希表

除留余數法:除數的確定

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84343.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 開發問題:android.content.res.Resources$NotFoundException: Resource ID

android.content.res.Resources$NotFoundException: Resource ID #0xff412804問題原因 該異常表示 Android 系統嘗試通過資源 ID 查找資源&#xff0c;例如&#xff0c;顏色、圖片等&#xff0c;但未查找到對應資源 其中&#xff0c;0xff412804 是一個硬編碼的整型顏色值&…

03.自動特征提取(深度學習)核心邏輯:通過多層非線性變換,讓模型自動學習從原始數據到高層特征的映射。為什么多層非線性變換可以達到這樣的效果?

在深度學習中,多層非線性變換能夠實現自動特征提取的核心原因在于其對數據表征的分層學習能力和非線性映射的表達優勢。以下從理論基礎、數學機制、實際效果三個層面展開解析: 一、非線性變換的本質:突破線性模型的表達局限 線性模型的局限性 線性變換(如矩陣乘法)只能學…

42-Oracle 23 ai 安全新特性(Audit統一審計)

小伙伴們業務和安全運維中需要數據庫審計都是由哪些模塊來實現的&#xff0c;專門的第三方產品嗎&#xff1f;在醫療領域防統方等業務場景和數據庫的審計集合很是緊密。 在Oracle逐個版本的演進中&#xff0c;Oracle 23ai 的審計特性在安全領域的重大革新&#xff0c;延續傳統…

Python 爬蟲入門 Day 4 - 模擬登錄爬蟲與 Session 維持

Python 第二階段 - 爬蟲入門 &#x1f3af; 今日目標 學習什么是 Cookie / Session&#xff0c;為什么要維持登錄狀態掌握 requests.Session 用法模擬登錄一個帶登錄表單的網站獲取登錄后的頁面內容 &#x1f4d8; 學習內容詳解 &#x1f510; 什么是 Session&#xff1f; …

新零售系統商城開發全解析

一、新零售系統商城概述? (一)新零售的概念? 新零售依托互聯網與物聯網技術,以數據驅動為核心,打破線上線下的界限,構建起一體化的全新零售模式。它不再局限于傳統的銷售渠道,而是通過整合線上電商平臺、線下實體店鋪以及現代物流配送等多方面資源,實現商品、服務、…

c++基礎入門——c++初識

我看的是B站黑馬程序員的課《C教程》。準備用這個專欄記錄一下學習筆記。 這套c課程的課程安排如下&#xff1a; 階段內容目標案例第一階段C基礎語法入門對c有初步了解&#xff0c;能夠有基礎編程能力通訊錄管理系統第二階段c核心編程介紹c面向對象編程&#xff0c;為大型項目…

【css】設置了margin-top為負數,div被img覆蓋的解決方法

文章目錄 場景默認情況下&#xff0c;層疊順序是如何工作的&#xff1f;為什么 img 會覆蓋 div&#xff1f;解決方法 場景 <img src"image.jpg"> <div>Content</div>有代碼如上&#xff0c;img src是一個https網絡圖片鏈接。 若div的margin-top為…

4 Studying《ARM System Developer’s Guide》1-7

目錄 Preface Chapter1 ARM Embedded Systems 1.1 The RISC design philosophy 1.2 The ARM Design Philosophy 1.3 Embedded System Hardware 1.4 Embedded System Software 1.5 Summary Chapter2 ARM Processor Fundamentals 2.1 Registers 2.2 Current Program St…

Vue3 + Axios + Ant Design Vue 請求封裝詳解教程(含 Token 鑒權、加密、下載)

Vue3 Axios Ant Design Vue 請求封裝詳解教程&#xff08;含 Token 鑒權、加密、下載&#xff09; 一、完整源碼&#xff08;請先閱讀&#xff09; import { message, Modal } from ant-design-vue; import axios from axios; import { localRead } from //utils/local-util…

SQL注入安全研究

?據OWASP 2023報告顯示&#xff0c;SQL注入連續15年位居Web安全威脅榜首&#xff0c;在應用漏洞中占比34.1%?? ?NIST統計顯示&#xff1a;2022-2023年高危SQL注入漏洞同比增長27%&#xff0c;企業平均修復成本達$320,000? 一、漏洞本質與技術原理解析 1. SQL注入核心機理…

Ubuntu最新版本(Ubuntu22.04LTS)安裝nfs服務器

NFS&#xff08;Network File System&#xff09;是一種允許不同計算機之間共享文件的網絡文件系統。 在Ubuntu 22.04 LTS中&#xff0c;您可以使用以下步驟安裝并配置NFS服務器。 一、安裝NFS服務器 在Ubuntu 22.04 LTS中&#xff0c;您可以使用以下命令安裝NFS服務器&…

學習筆記丨數字信號處理(DSP)的應用——圖像處理篇

&#x1f4cc; DSP在圖像處理中的應用&#xff1a;核心技術解析 數字信號處理&#xff08;DSP&#xff09;是圖像處理的核心技術之一&#xff0c;廣泛應用于增強、壓縮、分析和識別等領域。以下是DSP在圖像處理中的關鍵應用及技術細節&#xff1a; 目錄 &#x1f50d; 圖像增…

Kafka Broker處理消費者請求源碼深度解析:從請求接收到數據返回

在Kafka生態體系中&#xff0c;消費者從Broker拉取消息是實現數據消費的關鍵環節。Broker如何高效處理消費者請求&#xff0c;精準定位并返回對應分區數據&#xff0c;直接決定了整個消息系統的性能與穩定性。接下來&#xff0c;我們將聚焦Kafka Broker端&#xff0c;深入剖析其…

Objective-C與Swift混合編程

Objective-C與Swift混合編程的基本概念 Objective-C與Swift混合編程是指在同一項目中同時使用兩種語言進行開發。這種混合編程方式在遷移舊項目或利用Swift新特性時非常有用。兩種語言可以相互調用&#xff0c;但需要遵循特定的規則和橋接機制。 設置混合編程環境 在Xcode項…

IDE深度集成+實時反饋:企業級軟件測試方案Parasoft如何重塑汽車巨頭的測試流程

在汽車行業數字化轉型的浪潮中&#xff0c;全球第四大汽車集團Stellantis曾面臨嚴峻的測試效率挑戰&#xff1a;開發與測試流程脫節、團隊對“測試左移”策略的抵觸、TDD&#xff08;測試驅動開發&#xff09;推進困難……這些痛點直接導致質量保障滯后&#xff0c;拖慢產品交付…

【Linux】Linux異步I/O -libaio

一、libaio 原理概述 1.1 libaio 介紹 libaio&#xff08;Linux Asynchronous I/O&#xff09;是 Linux 內核提供的異步 I/O 庫&#xff0c;其核心原理是&#xff1a; 異步提交&#xff1a;應用程序通過 io_submit 提交 I/O 請求后立即返回&#xff0c;不阻塞進程事件通知&a…

git submodule 和git repo介紹

這是一個 Git 子模塊&#xff08;submodule&#xff09;管理問題。當一個 Git 倉庫&#xff08;主倉庫&#xff09;中包含多個其他 Git 倉庫&#xff08;子倉庫&#xff09;時&#xff0c;最推薦的做法是使用 Git 子模塊 或 Git 子樹&#xff08;subtree&#xff09; 進行管理。…

識別網絡延遲與帶寬瓶頸

識別網絡延遲與帶寬瓶頸 在分布式系統與微服務架構日益普及的背景下,網絡性能成為影響系統響應速度與服務可用性的重要因素。網絡延遲和帶寬瓶頸是兩類最常見的網絡性能障礙。準確識別這兩類瓶頸,有助于系統架構師從根源優化服務質量,保障系統在高并發、高流量場景下依然具…

Linux內網穿透(frp)

目標&#xff1a;讓我的VMware虛擬機某個服務擁有自己的外網訪問地址 FRP 服務端&#xff08;公網服務器&#xff09;配置 1. 下載 FRP 登錄公網服務器&#xff0c;執行以下命令下載并解壓 FRP&#xff1a; # 下載對應版本&#xff08;以Linux 64位為例&#xff09; wget h…

《Vuejs設計與實現》第 9 章(簡單 diff 算法)

目錄 9.1 減少 DOM 操作的性能開銷 9.2 DOM 復用與 key 的作用 9.3 找到需要移動的元素 9.4 如何移動元素 9.5 添加新元素 9.6 移除不存在的元素 9.7 總結 當新舊 vnode 的子節點都是一組節點時&#xff0c;為了以最小的性能開銷完成更新操作&#xff0c;需要比較兩組子…