排序算法,咕咕咕

1.選擇排序

void selectsort(vector<int>& v)
{
for(int i=0;i<v.size()-1;i++)
{int mini=i;for(int j=i+1;j<v.size();j++){if(v[i]>v[j]){mini=j;}}if(mini!=i)swap(v[i],v[mini]);
}
}

2.堆排序

void adjustdown(vector<int>& v,int root,int size)
{
int largest=root;
int left=2*root+1;
int right=2*root+2;
if(left<size&&v[left]>v[largest]) largest=left;
if(right<size&&v[right]>v[largest]) largest=right;
if(largest!=root)
{swap(v[root],v[largest]);adjustdown(v,largest,size);
}}
void heapsort(vector<int>& v)
{
int n=v.size();
for(int i=n/2-1;i>=0;i--)    非葉子結點
{adjustdown(v,i,n);
}
for(int i=n-1;i>0;i--)       大堆只是父結點大于子節點,相鄰子節點不一定大于
{
swap(v[i],v[0]);
adjustdown(v,0,n);
}
}

3.插入排序

void insertsort(vector<int>& v)
{int n=v.size();for(int i=1;i<n;i++){int key=v[i];int j=i-1;while(j>=0&&v[j]>key){v[j+1]=v[j];j--;}v[j+1]=key;}
}

4.希爾排序

void shellsort(vector<int>& v)
{int n=v.size();int gap=1;while(gap<n/3){gap=gap*3+1;}for(;gap>0;gap=(gap-1)/3){for(int i=gap;i<n;i++){int key=v[i];int j=i-gap;while(j>=0&&v[j]>key){v[j+gap]=v[j];j-=gap;}v[j+gap]=key;}}
}

5.冒泡排序

void bubblesort(vector<int>& arr)
{for(int i=0;i<arr.size()-1;i++){for(int j=0;j<arr.size()-1-i;j++){if(arr[j]>arr[j+1]){swap(arr[j],arr[j+1]);}}}
}

6.快速排序

//快速排序 hoare法
int findkeyi(vector<int>& arr,int left,int right)
{
int pivot=arr[left];
int i=left-1;
int j=right+1;
while(true)
{do{i++;}while(arr[i]<pivot);do{j++;}while(arr[j]>pivot);if(i>=j) return j;swap(arr[i],arr[j]);
}
}
void quicksort(vector<int>& arr,int left,int right)
{
if(left<right)
{int gugu=findkeyi(arr,left,right);quicksort(arr,left,gugu);quicksort(arr,gugu+1,right);
}
}
//挖坑法
int findkeyi(vector<int>& arr,int left,int right)
{int pivot=arr[left];int hole=left;while(left<right){while(left<right&&arr[right]>=pivot) right--;arr[hole]=arr[right];hole=right;while(left<right&&arr[left]<=pivot) left++;arr[hole]=arr[left];hole=left;}arr[hole]=pivot;return hole;
}
void quicksort(vector<int>& arr,int left,int right)
{if(left<right){int gugu=findkeyi(arr,left,right);quicksort(arr,left,gugu-1);quicksort(arr,gugu+1,right);}
}
//lomuto
int findkeyigugu(vector<int>& arr,int left,int right)
{int pivot=arr[right];int i=left-1;for(int j=left;j<right;j++){if(arr[j]<pivot){i++;swap(arr[i],arr[j]);}}swap(arr[i+1],arr[right]);return i+1;
}
void quicksort(vector<int>& arr,int left,int right)
{if(left<right){int gugu=findkeyi(arr,left,right);quicksort(arr,left,gugu-1);quicksort(arr,gugu+1,right);}
}
//非遞歸雙指針
void quicksort(vector<int>& arr,int left,int right)
{stack<pair<int,int>> st;st.push({left,right});while(!st.empty()){auto [l,r]=st.top();st.pop();if(l>=r) continue;int gugu=findkeyigugu(arr,l,r);st.push({gugu+1,r});st.push({l,gugu-1});}
}

7.歸并排序

void merge(vector<int>& arr,int left,int mid,int right)
{int n1=mid-left+1;int n2=right-mid;vector<int> gu(n1),gugu(n2);for(int i=0;i<n1;i++){gu[i]=arr[left+i];}for(int j=0;j<n2;j++){gugu[j]=arr[mid+1+j];}int i=0;int j=0;int k=left;while(i<n1&&j<n2){if(gu[i]<gugu[j]){arr[k]=gu[i];i++;}else{arr[k]=gugu[j];j++;}k++;}while(i<n1){arr[k]=gu[i];i++;k++;}while(j<n2){arr[k]=gugu[j];k++;j++;}
}
void mergesort(vector<int>& arr,int left,int right)
{if(left<right){int mid=left+(right-left)/2;mergesort(arr,left,mid);mergesort(arr,mid+1,right);merge(arr,left,mid,right);}
}

8.計數排序

void countingsort(vector<int>& arr)
{if(arr.empty()) return;int min=*min_element(arr.begin(),arr.end());int max=*max_element(arr.begin(),arr.end());int l=max-min+1;vector<int> result(l,0);for(int num:arr){result[num-min]++;      每個數出現了幾次,哈希的思想}int index=0;for(int i=0;i<l;i++){int num=i+min;while(result[i]>0){arr[index]=num;result[i]--;index++;}}
}

9.總結

  • 選擇排序:簡單直觀,每次選最小元素交換,時間復雜度 O (n2),不穩定。
  • 堆排序:利用堆的特性,時間復雜度 O (n log n),空間復雜度 O (1),不穩定。
  • 插入排序:適合近乎有序的數據,時間復雜度 O (n2),穩定。
  • 希爾排序:插入排序的優化版,通過增量分組減少移動次數,時間復雜度與增量有關,不穩定。
  • 冒泡排序:通過相鄰元素交換 “浮” 出最大元素,時間復雜度 O (n2),穩定(可優化)。
  • 快速排序:分治法的典型應用,平均時間復雜度 O (n log n),最壞 O (n2),不穩定,有多種分區實現(hoare、挖坑、lomuto 等)。
  • 歸并排序:分治法,時間復雜度 O (n log n),空間復雜度 O (n),穩定。
  • 計數排序:非比較排序,適合范圍小的整數,時間復雜度 O (n + k),穩定(標準實現)。

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

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

相關文章

數據庫查詢系統——pyqt+python實現Excel內查課

一、引言 數據庫查詢系統處處存在&#xff0c;在教育信息化背景下&#xff0c;數據庫查詢技術更已深度融入教務管理場景。本系統采用輕量化架構&#xff0c;結合Excel課表&#xff0c;通過PythonPyQt5實現跨平臺桌面應用&#xff0c;以實現簡單查課效果。 二、GUI界面設計 使用…

base64魔改算法 | jsvmp日志分析并還原

前言 上一篇我們講了標準 base64 算法還原&#xff0c;為了進一步學習 base64 算法特點&#xff0c;本文將結合 jsvmp 日志&#xff0c;實戰還原出 base64 魔改算法。 為了方便大家學習&#xff0c;我將入參和上篇文章一樣&#xff0c;入參為 Hello, World!。 插樁 在js代碼中&…

vue3筆記(2)自用

目錄 一、作用域插槽 二、pinia的使用 一、Pinia 基本概念與用法 1. 安裝與初始化 2. 創建 Store 3. 在組件中使用 Store 4. 高級用法 5、storeToRefs 二、Pinia 與 Vuex 的主要區別 三、為什么選擇 Pinia&#xff1f; 三、定義全局指令 1.封裝通用 DOM 操作&#…

大模型面試回答,介紹項目

1. 模型準備與轉換&#xff08;PC端/服務器&#xff09;你先在PC上下載或訓練好大語言模型&#xff08;如HuggingFace格式&#xff09;。用RKLLM-Toolkit把模型轉換成瑞芯微NPU能用的專用格式&#xff08;.rkllm&#xff09;&#xff0c;并可選擇量化優化。把轉換好的模型文件拷…

Oracle 19.20未知BUG導致oraagent進程內存泄漏

故障現象查詢操作系統進程的使用排序&#xff0c;這里看到oraagent的物理內存達到16G&#xff0c;遠遠超過正常環境&#xff08;正常環境在19.20大概就是100M多一點&#xff09;[rootorastd tmp]# ./hmem|more PID NAME VIRT(kB) SHARED(kB) R…

嘗試幾道算法題,提升python編程思維

一、跳躍游戲題目描述&#xff1a; 給定一個非負整數數組 nums&#xff0c;你最初位于數組的第一個下標。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最后一個下標。示例&#xff1a;輸入&#xff1a;nums [2,3,1,1,4] → 輸出&#xff1a;True輸入…

【菜狗處理臟數據】對很多個不同時間序列數據的文件聚類—20250722

目錄 具體做法 可視化方法1&#xff1a;PCA降維 可視化方法2、TSNE降維可視化&#xff08;非線性降維&#xff0c;更適合聚類&#xff09; 可視化方法3、輪廓系數評判好壞 每個文件有很多行列的信息&#xff0c;每列是一個駕駛相關的數據&#xff0c;需要對這些文件進行聚類…

Qwen-MT:翻得快,譯得巧

我們再向大家介紹一位新朋友&#xff1a;機器翻譯模型Qwen-MT。開發者朋友們可通過Qwen API&#xff08;qwen-mt-turbo&#xff09;&#xff0c;來直接體驗它又快又準的翻譯技能。 本次更新基于強大的 Qwen3 模型&#xff0c;進一步使用超大規模多語言和翻譯數據對模型進行訓練…

在 OceanBase 中,使用 TO_CHAR 函數 直接轉換日期格式,簡潔高效的解決方案

SQL語句SELECT TO_CHAR(TO_DATE(your_column, DD-MON-YY), YYYY-MM-DD) AS formatted_date FROM your_table;關鍵說明&#xff1a;核心函數&#xff1a;TO_DATE(30-三月-15, DD-MON-YY) → 將字符串轉為日期類型TO_CHAR(..., YYYY-MM-DD) → 格式化為 2015-03-30處理中文月份&a…

pnpm運行electronic項目報錯,npm運行正常。electronic項目打包為exe報錯

pnpm運行electronic項目報錯 使用 pnpm 運行 electronic 項目報錯&#xff0c;npm 運行正常&#xff0c;報錯內容如下 error during start dev server and electron app: Error: Electron uninstallat getElectronPath (file:///E:/project/xxx-vue/node_modules/.pnpm/elect…

8?? 高級特性—— 列表生成式

文章目錄&#x1f9e0; 總結1. 基本語法2. 加篩選條件&#x1f501; 雙層循環&#xff08;全排列&#xff09;&#x1f4c2; 遍歷目錄&#x1f511; 遍歷字典&#x1f521; 轉小寫3. if 和 if...else 的區別4. 練習題&#x1f9e0; 總結 特性用法示例基礎語法[x for x in iter…

DocC的簡單使用

DocC的簡單使用 在寫3GShare中&#xff0c;由于剛開始使用MVC模式來寫東西&#xff0c;對很多東西都不是很熟&#xff0c;經常寫著寫著就忘了自己在寫什么&#xff0c;所以學了一下DocC來加快開發進度 什么是DocC 簡單來說&#xff0c;DocC就是更高級的注釋&#xff0c;雖然…

深入理解C語言快速排序與自省排序(Introsort)

排序算法是計算機科學中最基礎也是最重要的知識之一。快速排序&#xff08;Quicksort&#xff09;因其平均時間復雜度為 O(n log n) 而廣受歡迎&#xff0c;但在最壞情況下會退化到 O(n)。為了克服這一缺點&#xff0c;自省排序&#xff08;Introsort&#xff09; 應運而生&…

C#編程基礎:運算符與結構詳解

目錄 一.關系運算符 常見關系運算符 二.邏輯運算符 常見邏輯運算符 1. 邏輯與&#xff08;&& 或 and&#xff09; 2. 邏輯或&#xff08;|| 或 or&#xff09; 3. 邏輯非&#xff08;! 或 not&#xff09; 運算符優先級 三.if語句 1.c#程序的三大結構 1.順序…

嵌入式學習-土堆目標檢測(3)-day27

再學一個labelme在labelstudio環境中再pip install labelme安裝好后直接輸入 labelme之后點擊保存&#xff0c;選擇保存文件地址還有一個就是將labelme的格式轉化為yolo格式還是在labelstudio這個環境里面安裝pip install labelme2yolo

Qt OpenGL 集成:開發 3D 圖形應用

Qt 提供了完善的 OpenGL 集成方案&#xff0c;使開發者能夠在 Qt 應用中高效開發 3D 圖形應用。通過 Qt 的 OpenGL 模塊&#xff0c;可簡化 OpenGL 上下文管理、窗口渲染和跨平臺適配&#xff0c;同時結合現代 OpenGL 特性&#xff08;如著色器、頂點緩沖、紋理等&#xff09;實…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 熱詞評論查詢功能實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解熱詞評論查詢功能實現 視頻在線地址&#…

使用 Google Earth 的 DEM — 教程。

數字高程模型 (DEM)描繪了已知高程點之間的表面高程。本教程將向您展示如何使用 Google Earth 的高程數據生成 DEM。在當今世界&#xff0c;DEM 主要用于 GIS 應用。 當然&#xff0c;我們可以從美國地質調查局 (USGS) 網站下載數字高程模型 (DEM)。但如果我們想知道某個地點的…

在 UniApp 中實現中間凸起 TabBar 的完整指南

如何在 UniApp 中設置中間 TabBar 凸起效果 在移動應用開發中&#xff0c;TabBar 是常見的導航組件&#xff0c;而中間凸起的 TabBar 按鈕則是一種流行的設計風格&#xff0c;常用于突出重要功能&#xff08;如發布、拍照等&#xff09;。UniApp 提供了 midButton 屬性&#xf…

微觀低代碼

今日去深圳的一家工廠給客戶做培訓&#xff0c;主要培訓內容為低代碼產品的二開和功能演示。客戶使用了20年的ERP和OA系統&#xff0c;目前想對接到低代碼平臺。客戶目前想實現的主要功能是&#xff0c;對接OA的單點登錄&#xff0c;把ERP的功能遷移到低代碼平臺上來工廠規模比…