網站首頁 編程語言 正文
起泡排序的基本思想
起泡排序易于冒泡排序算法合并,即向后推出最大數。將被排序的記錄數組R[1..n]垂直排列,每個記錄R[i]看作是重量為R[i]的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上“飄浮”。如此反復進行,直到最后任何兩個氣泡都是輕者在上,重者在下為止。一般地,第i遍處理時,不必檢查第i個位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。即就是在一組待排序的數據中,兩兩比較數據的大小,發現兩個記錄的排序次序相反時就交換位置,直到沒有反序的記錄為止。也就是說它重復地走訪過要排序的序列,一次比較兩個項目,如果他們的順序錯誤就把他們交換過來。走訪序列的工作是重復地進行直到沒有再需要做交換動作,該序列已經排序完成。一趟冒泡,至少可以把值最大的元素送到最后位置(或最上邊);當然也可以倒過來做,把值小的元素向前移或向下移,一趟冒泡,至少可以把值最小的元素送到最前面的位置(或最下邊)。
雙向起泡排序實現如下
#include<iostream>
using namespace std;
// 交換兩個數
void swap(int &i, int &j)
{
int t = i;
i = j;
j = t;
}
// 打印數組
void show(int a[], int n)
{
for(int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
// 雙向起泡排序
void bubblesort(int a[], int n)
{
int low = 0, high = n-1;
bool flag = true;
while(low < high && flag)
{
flag = false;
show(a, 10);
int i = low;
while(i < high)
{
if(a[i] > a[i + 1])
{
swap(a[i], a[i + 1]);
flag = true;
}
i++;
}
high--;
int j = high;
while(j > low)
{
if(a[j] < a[j-1])
{
swap(a[j-1], a[j]);
flag = true;
}
j--;
}
low++;
}
}
int main(){
int a[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int n = 10;
// 輸出初始狀態
// show(a, n);
// 雙向冒泡排序
bubblesort(a, n);
// 排序后輸出
cout << "after sort" << endl;
show(a, n);
}
代碼中示例的輸出為:
10 9 8 7 6 5 4 3 2 1?
1 9 8 7 6 5 4 3 2 10?
1 2 8 7 6 5 4 3 9 10
1 2 3 7 6 5 4 8 9 10
1 2 3 4 6 5 7 8 9 10
after sort
1 2 3 4 5 6 7 8 9 10
原文鏈接:https://blog.csdn.net/m0_48205050/article/details/127751222
相關推薦
- 2022-06-10 C語言?模擬實現strcpy與strcat函數詳解_C 語言
- 2022-03-22 .NET?6開發TodoList開發查詢分頁_實用技巧
- 2023-07-08 CMake Error at CMakeLists.txt:4 (find_package): By
- 2022-12-10 C++模擬實現string的方法詳解_C 語言
- 2022-12-10 OpenMP深入剖析reduction子句教程_C 語言
- 2022-07-07 Python如何在列表尾部添加元素_python
- 2022-09-15 Python淺析匿名函數lambda的用法_python
- 2022-06-17 Android性能優化之圖片大小,尺寸壓縮綜合解決方案_Android
- 最近更新
-
- 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同步修改后的遠程分支