C語言排序之快速排序

? ? ? ?快速排序是一種高效的排序算法。它采用了分治的策略,通過選擇一個基準元素,將待排序的序列劃分為兩部分,一部分的元素都比基準元素小,另一部分的元素都比基準元素大,然后對這兩部分分別進行快速排序,從而實現整個序列的有序排列。

以下是快速排序的基本步驟:

  1. 選擇一個基準元素:通常可以選擇序列的第一個元素、最后一個元素或者中間元素作為基準。
  2. 分區操作:通過一系列的比較和交換,將序列中小于基準的元素移到基準的左邊,大于基準的元素移到基準的右邊。
  3. 對分區后的左右兩部分子序列,分別重復步驟 1 和 2,直到整個序列有序。

例如,對于序列?[12, 11, 13, 5, 6]?,選擇第一個元素?12?作為基準:

  • 經過分區操作后,序列變為?[5, 11, 6, 12, 13]?。
  • 然后對?[5, 11, 6]?和?[12, 13]?分別繼續進行快速排序。

快速排序的平均時間復雜度為 (O(nlogn)) ,空間復雜度為(Ologn)? 。在大多數情況下,它的性能非常出色,但在最壞情況下,時間復雜度會退化為(On2)? 。不過,通過合理選擇基準元素,可以很大程度上避免最壞情況的發生。

快速排序的單趟排序

? ? ? ?通過一趟排序將數據分割成獨立的兩部分,其中一部分的所有數據都比另一組數據的數值小,然后再次使用相同的方法分別將這兩部分再分成兩部分,從而完成快速排序。

1.霍爾法

“霍爾法”通常指的是快速排序(Quick Sort)中的一種實現方式,也被稱為霍爾劃分。

快速排序是一種分治算法,其基本思想是通過一趟排序將待排序的序列劃分成兩部分,然后對這兩部分分別進行排序,以實現整個序列的有序。

霍爾法的具體實現步驟如下:

  1. 選取一個基準元素 key,通常選擇數組的第一個元素、中間元素或最后一個元素,也可以選擇這三個元素的中間值等,然后將這個基準元素與數組第一個元素進行交換。
  2. 定義兩個指針 left 和 right,left 從數組的第一個元素開始(即左邊)向右遍歷,right 從數組的最后一個元素開始(即右邊)向左遍歷。
  3. 首先,right 指針從右向左移動,找到比 key 小的值時停下來。然后,left 指針從左向右移動,找到比 key 大的值時停下來。
  4. 交換 left 和 right 所指向的值,這一步的目的是將比 key 小的值往左放,將比 key 大的值往右放。
  5. 重復步驟 3 和 4,直到 left 和 right 相遇。
  6. 當 left 和 right 相遇后,將第一個元素(即 key)與它們相遇位置的值交換。此時,key 左邊的元素都比它小,右邊的元素都比它大,但左右兩邊的子序列并不一定是有序的。
  7. 對 key 左邊的子序列和右邊的子序列,分別重復上述步驟,進行遞歸排序,直到子序列不存在或者只有一個元素時結束遞歸。

key——>基準下標值;

指針 left指向最左端的元素也就是第一個元素(找比key大的元素)

? ? ? ? right指向最右端的元素也就是最后一個元素(找比key小的元素)

<1>

? ? ? left記錄左下標,從左向右遍歷

? ? ? right記錄右下標,從右向左遍歷,以第一個數作為基準值

? ? 5? ? ? ?2? ? ?7? ? ? 3? ? ?1? ? ?4? ? ?8? ?6

^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^right ? ? ? ? ? ? ? ? ?? ? ? ?

?key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

<2>

? ? ? right先出發,找比key小的值,找到停下

? ? 5? ? ? ?2? ? ?7? ? ? 3? ? ?1? ? ?4? ? ?8? ?6

^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??^right

key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

<3>

? ? ? left出發,找比key大的值,找到停下并與right進行交換

? ? 5? ? ? ?2? ? ?7? ? ? 3? ? ?1? ? ?4? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^right? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? 5? ? ? ?2? ?? 4? ? ? 3? ? ?1? ? ?7? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^right? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

<4>

? ? ?重復步驟<2>,<3>,直到left與right指向同一個數

? ? 5? ? ? ?2? ?? 4? ? ? 3? ? ?1? ? ?7? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ^right? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^left? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?key=5? ? ?

<5>

? ? 將left/right與key交換,完成單趟排序

? ??1? ? ? ?2? ?? 4? ? ? 3? ?? 5? ? ?7? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ^right? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^left? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?key=5? ? ?

總的來說就是把比key小的放在key左邊,比key大的放在key右邊,以下是代碼實現單趟排序

#include <stdio.h>// 交換兩個整數的值
void swap(int* a, int* b) {int tmp = 0;tmp = *a;*a = *b;*b = tmp;
}// 獲取數組中 begin、mid、end 三個位置元素的中間值,并與數組第一個元素交換
int getMid(int* a, int begin, int end) {int mid = (begin + end) / 2;if (a[begin] > a[mid]) {if (a[mid] > a[end]) {return mid;} else if (a[end] > a[begin]) {return begin;} else {return end;}} else {if (a[begin] > a[end]) {return begin;} else if (a[end] > a[mid]) {return mid;} else {return end;}}
}// 霍爾法快速排序的核心函數
void quickSortHoare(int* a, int begin, int end) {int left = begin;int right = end;if (left >= right) {return;}int mid = getMid(a, begin, end);swap(&a[begin], &a[mid]); int keyi = begin; while (left < right) {while (left < right && a[right] >= a[keyi]) {right--;}while (left < right && a[left] < a[keyi]) {left++;}swap(&a[left], &a[right]);}swap(&a[left], &a[keyi]); keyi = left; quickSortHoare(a, begin, keyi - 1); quickSortHoare(a, keyi + 1, end); 
}// 打印數組函數
void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int arr[] = {12, 11, 13, 5, 6};int n = sizeof(arr) / sizeof(arr[0]);printf("排序前的數組為:");printArray(arr, n);quickSortHoare(arr, 0, n - 1); printf("排序后的數組為:");printArray(arr, n);return 0;
}

2.挖坑法

? ? ? ? 與霍爾法不同的是,將key基準值用變量保存起來,然后將key空出來,也就是形成一個坑,left先指向這個坑right找比key小的值放進坑里,并將自己的位置設為坑,left找比key大的放進坑里,自己又變成坑,如此循環。

<1>

? ? ?先定義變量key,存儲數組第一個值作為key,此時left指向坑

52731486

? ^key? ? ? ?^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^right

<2>

? ? ?right開始找比key小的數,放進坑里,自己變為坑

52731486

? ^key? ? ? ?^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ^right

54273186

? ^key? ? ? ?^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ^right

<3>

? ? ?left開始找比key大的數,同上

54273186

? ^key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^right

54231786

? ^key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^left? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ^right

<4>

? ? ?重復步驟<2>,<3>,直到left與right相遇

54213? ??786

? ^key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^left? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???^right

<5>

? ? ?將key放在相遇的坑里,排序完畢,將key下標返回

4213? ? 5786

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^left? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^key?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???^right

以下是代碼實現:

int PartSort(int *arr,int left,int right){
int key=arr[left];
int hole=left;
while(left<right){
while(arr[right]>=key&&left<right){
right--;
}
arr[hole]=arr[right];
hole=right;
while(left<right&&arr[left]<=key){
left++;
}
arr[hole]=arr[left];
hole=left;
}
arr[hole]=key;
return hole;
}

?3.前后指針

? ? ? ?將數組的第一個元素作為基準值key,定義前指針prev指向數組第一個元素,后指針cur指向數組第二個數,由cur遍歷數組,找出比key小的數,prev在cur找到后向后移動一位并與cur交換,保證較小數在prev之前。

<1>

開始時prev指向數組第一個元素,cur指向第二個元素,此時cur的值比key小,prev向后移動一位后與cur交換,無變化

? ? 5? ? ? ?2? ? ?7? ? ? 1? ? ?3? ? ?4? ? ?8? ?6

^prev? ? ? ? ? ^cur? ? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ??^prev+1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

<2>

cur找到比key大的數此時cur繼續向后移動,prev不變

? ? 5? ? ? ?2? ? ?7? ? ? 1? ? ?3? ? ?4? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^cur? ? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ??^prev? ?? ? ? ?? ? ? ? ? ? ? ? ? ? ? ?

<3>

cur找到比key小的數此時prev向后移動一位,并與cur交換

? ? 5? ? ? ?2? ? ?7? ?? ?1? ? ?3? ? ?4? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^cur? ? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ??^prev? ?? ? ? ?? ? ? ? ?

?

? ? 5? ? ? ?2? ? ?7? ?? ?1? ? ?3? ? ?4? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^cur? ? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ? ? ? ? ? ? ? ? ? ??^prev? ?? ? ? ?? ? ? ? ?

?
? ? 5? ? ? ?2? ? ?1? ?? ?7? ? ?3? ? ?4? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^?cur? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ? ? ? ? ? ? ? ? ? ??^prev? ?? ? ? ?? ? ? ? ?

<4>

? ? ?重復步驟<2>,<3>,直到cur完成遍歷

? ? 5? ? ? ?2? ? ?1? ?? ?7? ? ?3? ? ?4? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^cur? ? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^prev? ?? ? ? ?? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 交換3和7

? ? 5? ? ? ?2? ? ?1? ?? ?3? ? ?7? ? ?4? ? ?8? ?6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^cur? ? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??^prev? ?? ? ? ?? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?交換4和7

? ? 5? ? ? ?2? ? ?1? ?? ?3? ? ?4? ? ?7? ? ?8??6

? ? ? ? ? ? ? ? ? ?

?key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^prev? ?? ? ? ?? ? ? ? ?

?

<5>

? ? ?cur完成遍歷后,將prev與key進行交換,返回key的下標

? ??4? ? ? ?2? ? ?1? ?? ?3? ?? 5? ? ?7? ? ?8??6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? key=5? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??^prev? ?? ? ? ?? ? ? ? ?

?以下是代碼實現:

int PastSort(int *arr,int  left,int right){
int key=left;
int prev=left;
int cur=left+1;
while(cur<=right){
if(arr[cur]<=arr[key]&&++prev!=cur){
swap(&arr[cur],&arr[prev];
}
cur++;
}
swap(&arr[key],&arr[prev]);
return prev;
}

?其實快速排序最核心的代碼就是單趟排序,以上三種是單趟排序的三種方法,大家任選一種牢記就好,主要函數的代碼如下(遞歸實現)

void QuickSort(int *arr,int begin,int end){
if(begin>=end){
return;
}
int key=PartSort(arr,begin,end);
QuickSort(arr,begin,key-1);
QuickSort(arr,key+1,end);
}

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

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

相關文章

前端開發工具

Lodash 有普通的 CommonJS 版本&#xff08;通常稱為 lodash&#xff09;和 ES6 模塊版本&#xff08;稱為 lodash-es&#xff09;。它們的主要區別包括&#xff1a; 模塊化&#xff1a;lodash 是傳統的 CommonJS 模塊&#xff0c;可使用 require 或 import 引入&#xff1b;lo…

2024年,搞AI就別卷模型了

你好&#xff0c;我是三橋君 2022年11月30日&#xff0c;OpenAI發布了一款全新的對話式通用人工智能工具——ChatGPT。 該工具發布后&#xff0c;僅用5天時間就吸引了100萬活躍用戶&#xff0c;而在短短2個月內&#xff0c;其活躍用戶數更是飆升至1億&#xff0c;成為歷史上增…

ARP協議介紹與ARP協議的攻擊手法

ARP是什么&#xff1f; ARP是通過網絡地址&#xff08;IP&#xff09;來定位機器MAC地址的協議&#xff0c;它通過解析網絡層地址&#xff08;IP&#xff09;來找尋數據鏈路層地址&#xff08;MAC&#xff09;的網絡傳輸協議。 對個定義不能理解的話&#xff0c;可以結合 TCP/I…

《戀與深空》2.0上線肉鴿模式,乙游玩家會買賬嗎?

乙游和肉鴿&#xff0c;看似八竿子打不著的兩個賽道&#xff0c;被疊紙給融合起來了。 根據《戀與深空》官方消息&#xff0c;即將在7月15日更新的2.0交錯視界版本中&#xff0c;會上線全新常駐玩法“混沌深網”&#xff0c;配置高隨機性Roguelike模式&#xff0c;并搭載了管理…

理想文檔發布了~一個集合了多個優秀開源項目的在線云文檔

兩年前我做了一個簡單的在線云文檔項目&#xff0c;選擇了開源的思維導圖、白板、流程圖、幻燈片等項目&#xff0c;在它們基礎上添加了云存儲的功能&#xff0c;然后寫了一個簡單的工作臺管理文件夾和文件&#xff1a; 放在了自己的個人網站上使用&#xff0c;同時寫了一篇水文…

【Leetcode 每日一題】349. 兩個數組的交集

給定兩個數組 nums1 和 nums2 &#xff0c;返回 它們的 交集 。輸出結果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結果的順序 。 示例 1&#xff1a; 輸入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 輸出&#xff1a;[2]示例 2&#xff1a; 輸入&#xff1a;nums…

[web]-代碼審計-運維失誤

打開頁面可以看到如下&#xff1a; 1、查看源代碼&#xff0c;發現驗證碼功能是正常生成的隨機的&#xff0c;輸入也沒有過濾&#xff0c;無法采用爆破。 2、根據題目提示運維失誤&#xff0c;使用dirsearch掃描&#xff0c;發現提交的地址check.php, 使用php5、.bak可以打開&…

2.The DispatcherServlet

The DispatcherServlet Spring的Web MVC框架與許多其他Web MVC框架一樣&#xff0c;是請求驅動的&#xff0c;圍繞一個中央Servlet&#xff08;即DispatcherServlet&#xff09;設計&#xff0c;該Servlet將請求分派給控制器&#xff0c;并提供其他功能以促進Web應用程序的開發…

創建I/O文件fopen

#include〈stdio.h〉 int mian(int argc,char *argv[]){ FILE *fp;//結構體fp fpfopen&#xff08;“1.txt”&#xff0c;“r”&#xff09;; }

程序的控制結構——if-else語句(雙分支結構)【互三互三】

目錄 &#x1f341; 引言 &#x1f341;if-else語句&#xff08;雙分支結構&#xff09; &#x1f449;格式1&#xff1a; &#x1f449;功能&#xff1a; &#x1f449;程序設計風格提示&#xff1a; &#x1f449;例題 &#x1f449;格式2&#xff1a; &#x1f449;…

Monaco 使用 ColorProvider

Manco 中可以使用調色板對色值進行修改&#xff0c;首先看一下調色版效果。 調色板是 Monaco-Editor 中一個特別的組件&#xff0c;通過兩個方法實現呼出調色板&#xff0c;provideColorPresentations 顯示調色窗口&#xff0c;provideDocumentColors 監聽頁面的變更&#xff0…

如何將libwebsockets庫編譯為x86架構

在之前的文章中&#xff0c;我們已經詳細介紹了如何交叉編譯libwebsockets并將其部署到ELF 1開發板上。然而在調試階段&#xff0c;發現將libwebsockets在Ubuntu環境下編譯為x86架構可能更為方便和高效。 通過在主機環境中編譯運用x86架構下的libwebsockets庫&#xff0c;可以…

阿里ChatSDK使用,開箱即用聊天框

介紹&#xff1a; 效果&#xff1a;智能助理 ChatSDK&#xff0c;是在ChatUI的基礎上&#xff0c;結合阿里云智能客服的最佳實踐&#xff0c;沉淀和總結出來的一個開箱即用的&#xff0c;可快速搭建智能對話機器人的框架。它簡單易上手&#xff0c;通過簡單的配置就能搭建出對…

Flowable工作流引擎核心事件詳細解釋說明

Flowable工作流引擎核心事件詳細解釋說明 流程執行事件 需要了解全部詳細事件的請看這個鏈接Flowable&#xff08;一個開源的工作流和業務流程管理引擎&#xff09;中與事件相關的一些核心概念 流程開始和結束事件 PROCESS_STARTED&#xff1a;標記流程實例的開始。PROCESS…

公益快報 | 中科億海微以企業獎學金為紐帶,深化校企合作

近日&#xff0c;為回報母校、激勵湖南大學機器人視覺感知與控制技術國家工程研究中心廣大學生&#xff0c;中科億海微電子科技&#xff08;蘇州&#xff09;有限公司&#xff08;簡稱“中科億海微”&#xff09;捐贈設立企業獎學金。此項獎學金的設立標志著校企合作邁向全方位…

【C++】C++中struct結構體和class類的區別

在C中&#xff0c; struct 和 class 在很多方面都非常相似&#xff0c;它們都可以包含數據成員&#xff08;變量&#xff09;和成員函數&#xff08;方法&#xff09;。然而&#xff0c;它們之間還是存在一些關鍵的區別&#xff1a; 1. 默認訪問權限 struct 的成員默認是 pub…

實現組件存儲 WinSxS 文件夾解析

目錄 背景 目錄名的組成 解析目錄結構 更新&總結 文章出處鏈接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/140385969]. 背景 WinSxS 文件夾位于 Windows 文件夾中&#xff0c;例如 C: \Windows\WinSxS。它是 Windows 組件存儲文件的位置。 Wind…

深入理解Spring Boot中的日志框架選擇

深入理解Spring Boot中的日志框架選擇 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 1. 背景與需求 在開發和運維中&#xff0c;日志是不可或缺的重要組成部分。Spring Boot作為一個流行的Java開…

idea啟動vue項目一直卡死在51%,問題分析及其如何解決

如果你的項目也一直卡在百分之幾十&#xff0c;你可以參考下面的方法&#xff0c;試一試能否解決 問題描述&#xff1a; 通過在idea終端中輸入命令 npm run serve 啟動vue項目&#xff0c;啟動進程一直卡在51% 如何解決&#xff1a; 檢查 < template > 標簽中的html內容…

深度學習中的超參管理方法:argparse模塊

在深度學習方法中我們不可避免地會遇到大量超參數如&#xff08;batch_size、learning_rate等&#xff09;。不同的超參數組合可以得到不同的訓練/測試結果。所以在訓練和測試過程中我們需要不斷調整超參數獲得理想的結果&#xff08;煉丹&#xff09;&#xff0c;如果每一次去…