網站首頁 編程語言 正文
方法一:冒泡排序
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素做同樣的工作,執行完畢后,找到第一個最大值。
- 重復以上的步驟,每次比較次數-1,直到不需要比較
示例:對數組4,2,8,0,5,7,1,3,9 進行排序
#include<iostream>
using namespace std;
int main() {
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
for (int i = 0; i < 9 - 1; i++)
{
for (int j = 0; j < 9 - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < 9; i++)
{
cout << arr[i] << endl;
}
system("pause");
return 0;
}
方法二:sort函數排序
示例:對數組2,4,5,3,1進行排序
sort函數的算法效率相當于快排。
sort 函數默認的是進行升序排序
有兩種方法可以進行降序,可自由選擇?
1. 使用greater<int>()
如果排序其他類型可更改參數
2. 自定義一個比較大小的函數,將大的排在前面
方法三:用交換函數swap排序
… …
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
… …
方法四:快速排序
- 找到分界點x,q[L],q[(L+R)/2],q[R]
- 左邊所有數Left<=x,右邊所有數Right>=x
- 遞歸排序Left,遞歸排序Right?
快速排序算法模板:
void quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l+r>>1]; //l+r>>1的意思是l+r的值除以2取整
while (i < j)
{
do i ++ ; while (q[i] < x);
do j -- ; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
else break;
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
方法五:歸并排序
- 確定分界點:mid=(l+r)/2
- 遞歸排序Left,遞歸排序Right
- 歸并 —— 合二為一??
歸并排序算法模板
void merge_sort(int q[], int l, int r)
{
if (l >= r) return;
int mid = l + r >> 1;
merge_sort(q, l, mid);
merge_sort(q, mid + 1, r);
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r)
if (q[i] < q[j]) tmp[k ++ ] = q[i ++ ];
else tmp[k ++ ] = q[j ++ ];
while (i <= mid) tmp[k ++ ] = q[i ++ ];
while (j <= r) tmp[k ++ ] = q[j ++ ];
for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}
總結
原文鏈接:https://blog.csdn.net/weixin_64565233/article/details/126652834
相關推薦
- 2023-07-15 es6中export和export default的區別
- 2022-09-04 從docker鏡像里提取dockerfile的兩種方法_docker
- 2022-11-16 Python中使用__hash__和__eq__方法的問題_python
- 2022-06-26 Python使用Tkinter?GUI實現輸入驗證功能_python
- 2023-06-05 Python數據分析之堆疊數組函數示例總結_python
- 2022-06-17 Ruby信號處理詳解_ruby專題
- 2022-07-30 .NetCore使用過濾器實現登錄權限認證的方法小結_實用技巧
- 2022-07-27 Python?虛擬環境的價值和常用命令詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支