數據結構c版(3)——排序算法

本章我們來學習一下數據結構的排序算法!

目錄

1.排序的概念及其運用

1.1排序的概念

1.2?常見的排序算法

2.常見排序算法的實現

2.1 插入排序

2.1.1基本思想:

2.1.2直接插入排序:

2.1.3 希爾排序( 縮小增量排序 )

2.2 選擇排序

2.2.1基本思想:

2.2.2 直接選擇排序:

2.2.3 堆排序

2.3 交換排序

2.3.1冒泡排序

2.3.2 快速排序

1. hoare版本

2. 挖坑法

3. 前后指針版本??編輯

2.3.2 快速排序優化

?2.3.3?快速排序非遞歸

2.4 歸并排序

2.5 非比較排序

3.排序算法復雜度及穩定性分析


1.排序的概念及其運用

1.1排序的概念

(1)排序:所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。

(2)穩定性:假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次???序保持不變,即在原序列中,??r [ i ] = r?[ j ],且?r [ i ]?在?r [ j ]?之前,而在排序后的序列中,??r [ i ]?仍在?r [ j ]之前,則稱這種排序算法是穩定的;否則稱為不穩定的。

(3)內部排序:數據元素全部放在內存中的排序。

(4)外部排序:數據元素太多不能同時放在內存中,根據排序過程的要求不能在內外存之間移動數據的排序。

1.2?常見的排序算法

2.常見排序算法的實現

2.1 插入排序

2.1.1基本思想:

直接插入排序是一種簡單的插入排序法,其基本思想是:

????????把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所有的記錄插入完為止,得到一個新的有序序列

實際中我們玩撲克牌時,就用了插入排序的思想

2.1.2直接插入排序:

????????當插入第i(i>=1) 個元素時,前面的 array[0],array[1],…,array[i-1] 已經排好序,此時用 array[i] 的排序碼與array[i-1],array[i-2],…的排序碼順序進行比較,找到插入位置即將 array[i] 插入,原來位置上的元素順序后移;
代碼案例:
// 時間復雜度:O(N^2) 逆序
// 最好的情況:O(N)  順序有序
void InsertSort(int* a, int n)
{// [0, end] end+1for (int i = 0; i < n-1; ++i){int end = i;int tmp = a[end + 1];while (end >= 0){if (tmp > a[end]){a[end + 1] = a[end];--end;}else{break;}}a[end + 1] = tmp;}
}
直接插入排序的特性總結:
????????1. 元素集合越接近有序,直接插入排序算法的時間效率越高。
????????2. 時間復雜度: O(N^2)
????????3. 空間復雜度: O(1) ,它是一種穩定的排序算法。
????????4. 穩定性:穩定

2.1.3 希爾排序( 縮小增量排序 )

????????希爾排序法又稱縮小增量法。希爾排序法的基本思想是:先選定一個整數,把待排序文件中所有記錄分成個 組,所有距離為的記錄分在同一組內,并對每一組內的記錄進行排序。然后,取,重復上述分組和排序的工 作。當到達 =1 時,所有記錄在統一組內排好序

?

?代碼案例:

// 平均O(N^1.3)
void ShellSort(int* a, int n)
{int gap = n;// gap > 1時是預排序,目的讓他接近有序// gap == 1是直接插入排序,目的是讓他有序while (gap > 1){//gap = gap / 2;gap = gap / 3 + 1;for (int i = 0; i < n - gap; ++i){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}
希爾排序的特性總結:
????????1. 希爾排序是對直接插入排序的優化。
????????2. 當 gap > 1 時都是預排序,目的是讓數組更接近于有序。當 gap == 1 時,數組已經接近有序的了,這樣就會很快。這樣整體而言,可以達到優化的效果。我們實現后可以進行性能測試的對比。
????????3. 希爾排序的時間復雜度不好計算,因為 gap 的取值方法很多,導致很難去計算,因此在好些書中給出的希爾排序的時間復雜度都不固定:
《數據結構 (C 語言版 ) --- 嚴蔚敏

?《數據結構-用面相對象方法與C++描述》--- 殷人昆

因為gap是按照Knuth提出的方式取值的,而且Knuth進行了大量的試驗統計,我們暫時就按照:O(n^{1.25}) 到?O(1.6*n^{1.25}) 來算。

????????4. 穩定性:不穩定

2.2 選擇排序

2.2.1基本思想:

????????每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完 。

2.2.2 直接選擇排序:

????????在元素集合array[i]--array[n-1] 中選擇關鍵碼最大 ( ) 的數據元素若它不是這組元素中的最后一個( 第一個 ) 元素,則將它與這組元素中的最后一個(第一個)元素交換在剩余的array[i]--array[n-2] array[i+1]--array[n-1] )集合中,重復上述步驟,直到集合剩余 1 個元素。

??代碼案例:

// 時間復雜度:O(N^2)
// 最好的情況下:O(N^2)
void SelectSort(int* a, int n)
{int begin = 0, end = n - 1;while (begin < end){int mini = begin, maxi = begin;for (int i = begin + 1; i <= end; ++i){if (a[i] < a[mini]){mini = i;}if (a[i] > a[maxi]){maxi = i;}}Swap(&a[begin], &a[mini]);if (maxi == begin){maxi = mini;}Swap(&a[end], &a[maxi]);++begin;--end;}
}
直接選擇排序的特性總結:
????????1. 直接選擇排序思考非常好理解,但是效率不是很好。實際中很少使用。
????????2. 時間復雜度: O(N^2)
????????3. 空間復雜度: O(1)
????????4. 穩定性:不穩定

2.2.3 堆排序

????????堆排序(Heapsort) 是指利用堆積樹(堆)這種數據結構所設計的一種排序算法,它是選擇排序的一種。它是通過堆來進行選擇數據。需要注意的是排升序要建大堆,排降序建小堆。

?

?代碼案例:

void AdjustDown(int* a, int size, int parent)
{int child = parent * 2 + 1;while (child < size){// 假設左孩子小,如果解設錯了,更新一下if (child + 1 < size && a[child + 1] > a[child]){++child;}if (a[child] > a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}// 升序
void HeapSort(int* a, int n)
{// O(N)// 建大堆for (int i = (n - 1 - 1) / 2; i >= 0; --i){AdjustDown(a, n, i);}// O(N*logN)int end = n - 1;while (end > 0){Swap(&a[0], &a[end]);AdjustDown(a, end, 0);--end;}
}
堆排序的特性總結:
????????1. 堆排序使用堆來選數,效率就高了很多。
????????2. 時間復雜度: O(N*logN)
????????3. 空間復雜度: O(1)
????????4. 穩定性:不穩定

2.3 交換排序

????????基本思想:所謂交換,就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置,交換排序的特點是:將鍵值較大的記錄向序列的尾部移動,鍵值較小的記錄向序列的前部移動。

2.3.1冒泡排序

?代碼案例:

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}// 時間復雜度:O(N^2)
// 最好情況是多少:O(N)
void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++){bool exchange = false;for (int i = 1; i < n-j; i++){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);exchange = true;}}if (exchange == false)break;}
冒泡排序的特性總結:
????????1. 冒泡排序是一種非常容易理解的排序
????????2. 時間復雜度: O(N^2)
????????3. 空間復雜度: O(1)
????????4. 穩定性:穩定

2.3.2 快速排序

????????快速排序是Hoare 1962 年提出的一種二叉樹結構的交換排序方法,其基本思想為: 任取待排序元素序列中 的某元素作為基準值,按照該排序碼將待排序集合分割成兩子序列,左子序列中所有元素均小于基準值,右 子序列中所有元素均大于基準值,然后最左右子序列重復該過程,直到所有元素都排列在相應位置上為止

?代碼案例:

// 假設按照升序對array數組中[left, right)區間中的元素進行排序
void QuickSort(int array[], int left, int right)
{if(right - left <= 1)return;// 按照基準值對array數組的 [left, right)區間中的元素進行劃分int div = partion(array, left, right);// 劃分成功后以div為邊界形成了左右兩部分 [left, div) 和 [div+1, right)// 遞歸排[left, div)QuickSort(array, left, div);// 遞歸排[div+1, right)QuickSort(array, div+1, right);
}int GetMidi(int* a, int begin, int end)
{int midi = (begin + end) / 2;// begin end midi三個數選中位數if (a[begin] < a[midi]){if (a[midi] < a[end])return midi;else if (a[begin] > a[end])return begin;elsereturn end;}else{//...}
}void QuickSort(int* a, int begin, int end)
{if (begin >= end)return;int midi = GetMidi(a, begin, end);Swap(&a[midi], &a[begin]);int left = begin, right = end;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;// [begin, keyi-1] keyi [keyi+1, end]QuickSort(a, begin, keyi - 1);QuickSort(a, keyi+1, end);
}
????????上述為快速排序遞歸實現的主框架,發現與二叉樹前序遍歷規則非常像,同學們在寫遞歸框架時可想想二叉樹前序遍歷規則即可快速寫出來,后序只需分析如何按照基準值來對區間中數據進行劃分的方式即可。將區間按照基準值劃分為左右兩半部分的常見方式有:
1. hoare版本

代碼案例:

int PartSort1(int* a, int begin, int end)
{int midi = GetMidi(a, begin, end);Swap(&a[midi], &a[begin]);int left = begin, right = end;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]);return left;
}void QuickSort(int* a, int begin, int end)
{if (begin >= end)return;int keyi = PartSort1(a, begin, end);QuickSort(a, begin, keyi - 1);QuickSort(a, keyi+1, end);
}
2. 挖坑法

?代碼案例:

// 挖坑法
int PartSort2(int* a, int begin, int end)
{int midi = GetMidi(a, begin, end);Swap(&a[midi], &a[begin]);int key = a[begin];int hole = begin;while (begin < end){// 右邊找小,填到左邊的坑while (begin < end && a[end] >= key){--end;}a[hole] = a[end];hole = end;// 左邊找大,填到右邊的坑while (begin < end && a[begin] <= key){++begin;}a[hole] = a[begin];hole = begin;}a[hole] = key;return hole;
}void QuickSort(int* a, int begin, int end)
{if (begin >= end)return;int keyi = PartSort2(a, begin, end);QuickSort(a, begin, keyi - 1);QuickSort(a, keyi+1, end);
}
3. 前后指針版本?

?代碼案例:

int PartSort3(int* a, int begin, int end)
{int midi = GetMidi(a, begin, end);Swap(&a[midi], &a[begin]);int keyi = begin;int prev = begin;int cur = prev + 1;while (cur <= end){if (a[cur] < a[keyi] && ++prev != cur)Swap(&a[prev], &a[cur]);++cur;}Swap(&a[prev], &a[keyi]);keyi = prev;return keyi;
}void QuickSort(int* a, int begin, int end)
{if (begin >= end)return;int keyi = PartSort3(a, begin, end);QuickSort(a, begin, keyi - 1);QuickSort(a, keyi+1, end);
}

2.3.2 快速排序優化

1. 三數取中法選 key
2. 遞歸到小的子區間時,可以考慮使用插入排序

?2.3.3?快速排序非遞歸

?代碼案例:

void QuickSortNonR(int* a, int left, int right)
{Stack st;StackInit(&st);StackPush(&st, left);StackPush(&st, right);while (StackEmpty(&st) != 0){right = StackTop(&st);StackPop(&st);left = StackTop(&st);StackPop(&st);if(right - left <= 1)continue;int div = PartSort1(a, left, right);// 以基準值為分割點,形成左右兩部分:[left, div) 和 [div+1, right)StackPush(&st, div+1);StackPush(&st, right);StackPush(&st, left);StackPush(&st, div);}StackDestroy(&s);
}
快速排序的特性總結:
????????1. 快速排序整體的綜合性能和使用場景都是比較好的,所以才敢叫 快速 排序
????????2. 時間復雜度: O(N*logN)

3. 空間復雜度: O(logN)
4. 穩定性:不穩定

2.4 歸并排序

基本思想:
????????歸并排序(MERGE-SORT )是建立在歸并操作上的一種有效的排序算法 , 該算法是采用分治法( Divide and Conquer)的一個非常典型的應用。將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為二路歸并。 歸并排序核心步驟:

??代碼案例:

void _MergeSort(int* a, int begin, int end, int* tmp)
{if (begin >= end)return;int mid = (begin + end) / 2;// [begin, mid][mid+1, end]_MergeSort(a, begin, mid, tmp);_MergeSort(a, mid+1, end, tmp);// [begin, mid][mid+1, end]歸并int begin1 = begin, end1 = mid;int begin2 = mid + 1, end2 = end;int i = begin;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[i++] = a[begin1++];}else{tmp[i++] = a[begin2++];}}while(begin1 <= end1){tmp[i++] = a[begin1++];}while (begin2 <= end2){tmp[i++] = a[begin2++];}memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1));
}void MergeSort(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail");return;}_MergeSort(a, 0, n - 1, tmp);free(tmp);
}//非遞歸法
void MergeSortNonR(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail");return;}int gap = 1;while (gap < n){printf("gap:%2d->", gap);for (size_t i = 0; i < n; i += 2 * gap){int begin1 = i, end1 = i + gap - 1;int begin2 = i + gap, end2 = i + 2 * gap - 1;// [begin1, end1][begin2, end2] 歸并//printf("[%2d,%2d][%2d, %2d] ", begin1, end1, begin2, end2);// 邊界的處理if (end1 >= n || begin2 >= n){break;}if (end2 >= n){end2 = n - 1;}//printf("[%2d,%2d][%2d, %2d] ", begin1, end1, begin2, end2);int j = begin1;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[j++] = a[begin1++];}else{tmp[j++] = a[begin2++];}}while (begin1 <= end1){tmp[j++] = a[begin1++];}while (begin2 <= end2){tmp[j++] = a[begin2++];}memcpy(a + i, tmp + i, sizeof(int) * (end2-i+1));}printf("\n");gap *= 2;}free(tmp);
}
歸并排序的特性總結:
????????1. 歸并的缺點在于需要 O(N) 的空間復雜度,歸并排序的思考更多的是解決在磁盤中的外排序問題。
????????2. 時間復雜度: O(N*logN)
????????3. 空間復雜度: O(N)
????????4. 穩定性:穩定

2.5 非比較排序

思想:計數排序又稱為鴿巢原理,是對哈希直接定址法的變形應用。 操作步驟:
????????1. 統計相同元素出現次數
????????2. 根據統計的結果將序列回收到原來的序列中

?代碼案例:

// 基數排序/桶排序// 計數排序
// 時間:O(N+range)
// 空間:O(range)
void CountSort(int* a, int n)
{int min = a[0], max = a[0];for (int i = 1; i < n; i++){if (a[i] < min)min = a[i];if (a[i] > max)max = a[i];}int range = max - min + 1;int* count = (int*)calloc(range, sizeof(int));if (count == NULL){printf("calloc fail\n");return;}// 統計次數for (int i = 0; i < n; i++){count[a[i] - min]++;}// 排序int i = 0;for (int j = 0; j < range; j++){while (count[j]--){a[i++] = j + min;}}
}
計數排序的特性總結:
????????1. 計數排序在數據范圍集中時,效率很高,但是適用范圍及場景有限。
????????2. 時間復雜度: O(MAX(N, 范圍 ))
????????3. 空間復雜度: O( 范圍 )

????????4. 穩定性:穩定

3.排序算法復雜度及穩定性分析

?

?注:

? ? ? ? (1)算法穩定性是指,待排序列中相同的值在排序后相對順序不變,這就是算法穩定。

????????(2)輔助空間是指在排序的過程中開辟了新的空間。

?本篇完!

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

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

相關文章

rtt的io設備框架面向對象學習-io設備管理層

目錄 1.設備基類2.rtt基類2.1 rtt基類定義2.2 對象容器定義2.3 rtt基類構造函數 3.io設備管理接口4.總結 這層我的理解就是rtt基類和設備基類所在&#xff0c;所以抽離出來好點&#xff0c;不然每個設備類都要重復它。 1.設備基類 /include/rtdef.h中定義了設備基類struct rt_…

記錄踩過的坑-PyTorch

安裝報錯 按PyTorch官網給出的命令 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 報錯 ERROR: Could not find a version that satisfies the requirement torch (from versions: none) ERROR: No matching distributio…

Redis為什么這么快?

基于內存&#xff1a;Redis 將數據存儲在內存中&#xff0c;內存訪問速度遠高于磁盤訪問速度&#xff0c;因此能夠快速讀寫數據。單線程模型&#xff1a;Redis 使用單線程模型來處理客戶端請求&#xff0c;避免了多線程之間的切換開銷&#xff0c;簡化了并發控制&#xff0c;提…

STM32(11)按鍵產生中斷

1.初始化IO引腳&#xff0c;設置模式&#xff0c;速度等 2.設置AFIO&#xff08;配置EXTI的引腳映射&#xff09;&#xff0c;記得開啟時鐘 3.配置EXTI的通道&#xff08;EXTI0和EXTI1&#xff09; 4.配置NVIC 4.1 中斷優先級分組 4.2 配置中斷 5.編寫中斷響應函數 在中斷向量…

消息隊列的實現

8.8 消息隊列 隊列是一種先進先出的結構&#xff0c;消息隊列是進程(線程)常用的一種方法&#xff0c;實現消息隊列常用的方法&#xff1a; &#xff08;1&#xff09;阻塞隊列 &#xff08;2&#xff09;無鎖隊列 &#xff08;3&#xff09;環形隊列 值得注意的是&#xff…

藍橋ACM培訓-實戰1

前言&#xff1a; 今天老師沒講課&#xff0c;只讓我們做了一下幾道題目。 正文&#xff1a; Problem:A 小藍與操作序列&#xff1a; #include<bits/stdc.h> using namespace std; stack<int> a; int main(){int n,flag1,ans;string cz;cin>>n;for(int i1;…

訪問修飾符、Object(方法,使用、equals)、查看equals底層、final--學習JavaEE的day15

day15 一、訪問修飾符 含義&#xff1a; 修飾類、方法、屬性&#xff0c;定義使用的范圍 理解&#xff1a;給類、方法、屬性定義訪問權限的關鍵字 注意&#xff1a; ? 1.修飾類只能使用public和默認的訪問權限 ? 2.修飾方法和屬性可以使用所有的訪問權限 訪問修飾符本類本包…

JetCache源碼解析——API實現(持續更新中……)

在JetCache中不僅可以通過在類和接口的函數上使用注解Cached、CacheUpdate和CacheInvalidate等實現緩存加載、更新和刪除操作&#xff0c;也支持通過調用API接口的形式來實現緩存的加載、更新和刪除操作。 緩存接口 緩存接口的定義如下&#xff1a; /*** 緩存接口&#xff0…

【計算機網絡】HTTPS 協議原理

https 一、HTTPS 是什么二、加密1. 加密概念2. 加密的原因3. 常見的加密方式&#xff08;1&#xff09;對稱加密&#xff08;2&#xff09;非對稱加密 三、數據摘要(數據指紋)四、HTTPS 的工作原理探究1. 只使用對稱加密2. 只使用非對稱加密3. 雙方都使用非對稱加密4. 非對稱加…

Linux:kubernetes(k8s)部署CNI網絡插件(4)

在上一章進行了node加入master Linux&#xff1a;kubernetes&#xff08;k8s&#xff09;node節點加入master主節點&#xff08;3&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136420447?spm1001.2014.3001.5501 但是他們顯示還是沒準備好 看一下…

面試筆記系列五之MySql+Mybaits基礎知識點整理及常見面試題

目錄 Myibatis myibatis執行過程 mybatis的優缺點有哪些&#xff1f; mybatis和hibernate有什么區別&#xff1f; mybatis中#{}和${}的區別是什么&#xff1f; 簡述一下mybatis插件運行原理及開發流程&#xff1f;&#xff08;插件四大天王&#xff09; mybatis的mapper沒…

2.模擬問題——5.星期幾與字符串對應

輸入輸出示例 輸入&#xff1a; 9 October 2001 14 October 2001 輸出&#xff1a; Tuesday Sunday 【原題鏈接】 字符串處理 C風格的字符串 字符數組&#xff0c;以’\0‘結尾建議在輸入輸出語句中使用 C風格的字符串 #include <string> using namespace std;初始化…

「優選算法刷題」:最長回文子串

一、題目 給你一個字符串 s&#xff0c;找到 s 中最長的回文子串。 如果字符串的反序與原始字符串相同&#xff0c;則該字符串稱為回文字符串。 示例 1&#xff1a; 輸入&#xff1a;s "babad" 輸出&#xff1a;"bab" 解釋&#xff1a;"aba"…

【字符串】馬拉車(Manacher)算法

本篇文章參考&#xff1a;比較易懂的 Manacher&#xff08;馬拉車&#xff09;算法配圖詳解 馬拉車算法可以求出一個字符串中的最長回文子串&#xff0c;時間復雜度 O ( n ) O(n) O(n) 因為字符串長度的奇偶性&#xff0c;回文子串的中心可能是一個字符&#xff0c;也可能是…

uniapp聊天記錄本地存儲(詳細易懂)

目錄 目錄 1、通過websocket拿取數據 2、獲取聊天數據 3、聊天信息存儲 、更新 4、讀取聊天記錄 5、發送信息&#xff0c;信息獲取 6、最終效果 1.聊天信息的存儲格式 2、樣式效果 寫聊天項目&#xff0c;使用到了本地存儲。需要把聊天信息保存在本地&#xff0c;實時獲…

GPT對話知識庫——ARM-Cortex架構分為哪幾個系列?每個系列有幾種工作模式?各種工作模式之間的定義和區別?每種架構不同的特點和應用需求?

提問模型&#xff1a;GPT-4-TURBO-PREVIEW 提問時間&#xff1a;2024.03.02 1&#xff0c;問&#xff1a; Cortex-M系列有幾種工作模式 1&#xff0c;答&#xff1a; Cortex-M系列微控制器是ARM公司開發的一類低功耗、高性能的32位微處理器&#xff0c;廣泛應用于嵌入式系統中…

Centos7使用man查找命令時,報錯No manual entry for xxxx

Centos7使用man查找命令時&#xff0c;報錯No manual entry for xxxx 在Linux中使用man指令查找指令信息時&#xff0c;報No manual entry for xxxx。 比如使用man指令查找sleep3號手冊時&#xff0c;出現以下錯誤&#xff1a; 這是由于沒有安裝man-pages這個rpm包導致的&#…

掌握基本排序算法:冒泡、選擇、插入和快速排序

在計算機科學的世界里&#xff0c;排序是一項基本而重要的操作。無論是數據庫管理、搜索引擎&#xff0c;還是日常編程&#xff0c;高效的排序算法都是提高性能的關鍵。本文將介紹四種基本的排序算法&#xff1a;冒泡排序、選擇排序、插入排序和快速排序&#xff0c;并探討它們…

從0開始學習NEON(1)

1、前言 在上個博客中對NEON有了基礎的了解&#xff0c;本文將針對一個圖像下采樣的例子對NEON進行學習。 學習鏈接:CPU優化技術 - NEON 開發進階 上文鏈接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一個例子 現在有一張圖片&#xff0c;需…

獲取 Windows 通知中心彈窗通知內容(含工具漢化)

目錄 前言 技術原理概述 測試代碼和程序下載連接 本文出處鏈接&#xff1a;https://blog.csdn.net/qq_59075481/article/details/136440280。 前言 從 Windows 8.1 開始&#xff0c;Windows 通知現在以 Toast 而非 Balloon 形式顯示&#xff08; Bollon 通知其實現在是應用…