[C++基礎]巢狀迴圈For loop

更新於 發佈於 閱讀時間約 5 分鐘

巢狀迴圈For loop介紹結構及範例說明

巢狀迴圈

巢狀迴圈是在一個迴圈內包含另一個迴圈的結構

簡單來說,就是內迴圈做完,才會在跑到外迴圈,接著在做內迴圈

程式範例

#include <iostream>
using namespace std;
int main()
{
for(int i=1;i<=5;i++) //外迴圈
{
printf("i=%d\t",i);
for(int j=1;j<=10;j++) //內迴圈
{
printf("@");
}
printf("\n");
}
system("pause");
return 0;
}


程式輸出結果圖

程式輸出結果圖

外迴圈跑五次分別每次跑時印出 i= 第幾圈,內迴圈跑十次印出@的符號

由此簡單範例說明,兩層的巢狀迴圈結構運作流程

氣泡排序法用巢狀For loop實現

泡沫排序(英語:Bubble Sort)又稱為泡式排序,是一種簡單的排序演算法。 它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。 走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。 這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

下面範例我們定義一個陣列data利用氣泡排序法來由小排到大

#include <iostream>
using namespace std;
int main()
{
int data[] = { 28 , 22 , 12 , 44 , 13};//若用先給予初始值方法定義陣列 [索引] 可省略
cout << "data陣列總記憶體"<<sizeof(data) << endl;
//取出 data陣列的長度
int data_len = sizeof(data)/sizeof(data[0]);
cout << "data陣列的長度"<< data_len << endl;
//bubble sort演算法
// int = 陣列長度 -1
for (int i = data_len - 1 ; i > 0; i--) //外迴圈
{
for (int j = 0; j < i ; j++) // 內迴圈
{
if(data[j] > data[j+1])
{ //換前需要一個變數先暫存
int t = data[j]; /*交換資料處理*/
data[j] = data[j+1];
data[j+1] = t;
}

}
}
//依序取出 經過bubble sort演算法整理後的資料
for (int i=0;i < data_len;i++)
{
printf("data[%d]=%d\n",i,data[i]);

}
system("pause");
return 0;
}
程式輸出結果圖

程式輸出結果圖

程式碼我們分三個區塊來理解

外迴圈

for (int i = data_len - 1 ; i > 0; i--) 遞減

  • 外迴圈,使用氣泡排序,迴圈從最後一個元素開始,每次遍歷都找到當前範圍內的最大值,並將其放在正確的位置。
  • 主要控制內迴圈要做幾次,因氣泡排序法,從大排到小,第一次找到最大的,所以可以遞減找到的次數,
  • 由下圖說明,從原始資料第一個元素開始往下一個元素比較大小,若是比他大就交換資料,以此類推第一次迴圈就依序排列,28先跟22比,28比較大就交換位子,在跟12比在交換,遇到44比較大28就保持在data[2]的位子,在由44跟13比在交換,做完第一次迴圈的流程找到第一個最大的數字,後面就以此類推,所以由此可見,後面比較的次數是會越來越少,所以外迴圈才會定義遞減的方式,利用定義個i讓內迴圈在做迴圈的次數是由這方式來控制。
  • 氣泡排序法說明

    氣泡排序法說明

內迴圈

		for (int j = 0; j < i ; j++) // 內迴圈 
{
if(data[j] > data[j+1])
{ //換前需要一個變數先暫存
int t = data[j]; /*交換資料處理*/
data[j] = data[j+1];
data[j+1] = t;
}

內迴圈就由外迴圈的i來定義要做幾次,if(data[j] < data[j+1]),就是在做比大小的方法,為方便解釋,都先由假設現在是跑第一次迴圈來做,第一個元素跟第二個去做比較。

				int t = data[j]; /*交換資料處理*/ 
data[j] = data[j+1];
data[j+1] = t;

int t = data[j]; 先定義一個變數,來暫存交換前的資料

data[j] = data[j+1]; 第一個元素跟第二個做交換

data[j+1] = t; 在把暫存第一個元素的資料,塞到第二個元素去

以上方法,就完成第一個元素跟第二個元素交換資料

另外一個For迴圈

//依序取出 經過bubble sort演算法整理後的資料 

for (int i=0;i < data_len;i++)
{
printf("data[%d]=%d\n",i,data[i]);
}

由先前定義好的data_len資料長度來設定迴圈的次數,利用for迴圈的特性依序取出data每一個元素的資料,在印出

印出結果

印出結果

謝謝大家的觀看,若有哪裡比較不清楚,在歡迎留言提問




留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
149會員
284內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/04/29
1. 什麼是虛擬環境 (venv)? 虛擬環境就是讓你在同一台電腦上,可以為不同的專案建立「獨立」的 Python 環境,互不干擾。 例如:某個專案用 Dash 3.0.4,另一個用 Dash 4.0,不會互相影響。 2. 如何建立一個新的 venv? 打開終端機 Terminal / C
Thumbnail
2025/04/29
1. 什麼是虛擬環境 (venv)? 虛擬環境就是讓你在同一台電腦上,可以為不同的專案建立「獨立」的 Python 環境,互不干擾。 例如:某個專案用 Dash 3.0.4,另一個用 Dash 4.0,不會互相影響。 2. 如何建立一個新的 venv? 打開終端機 Terminal / C
Thumbnail
2025/04/27
位於台中市石岡區的【九房3D彩繪村】,是一個結合了3D立體彩繪藝術、社區故事、以及鄉村風情的小村落。 在東豐鐵馬道騎腳踏車時意外發現,雖然好像有點落寞的感覺,但牆上的圖還是栩栩如生。 小缺點就是壁畫相對地沒有那麼集中,不然是挺不賴的。 📍 九房3D彩繪村 基本資訊 地址:台中市石岡區
Thumbnail
2025/04/27
位於台中市石岡區的【九房3D彩繪村】,是一個結合了3D立體彩繪藝術、社區故事、以及鄉村風情的小村落。 在東豐鐵馬道騎腳踏車時意外發現,雖然好像有點落寞的感覺,但牆上的圖還是栩栩如生。 小缺點就是壁畫相對地沒有那麼集中,不然是挺不賴的。 📍 九房3D彩繪村 基本資訊 地址:台中市石岡區
Thumbnail
2025/04/26
(不可分)(可分)意思代表動詞片語可不可分開 ✅ break down — 故障 / 損壞(不可分) My car broke down on the highway. 我的車在高速公路上拋錨了。 The washing machine broke down again.
2025/04/26
(不可分)(可分)意思代表動詞片語可不可分開 ✅ break down — 故障 / 損壞(不可分) My car broke down on the highway. 我的車在高速公路上拋錨了。 The washing machine broke down again.
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
Thumbnail
給定一個輸入陣列,每一個tuple代表節點之間了從屬關係。 請從從屬關係重建整顆二元樹,並且返回整顆二元樹的根結點。
Thumbnail
for loop、while loop、repeat
Thumbnail
for loop、while loop、repeat
Thumbnail
給定一個Linked list鏈結串列的Head node, 請判斷這條Linked list是否存在環路(Cycle)? 如果有環路,回傳True。 如果沒有,回傳False。
Thumbnail
給定一個Linked list鏈結串列的Head node, 請判斷這條Linked list是否存在環路(Cycle)? 如果有環路,回傳True。 如果沒有,回傳False。
Thumbnail
這篇文章,會帶著大家複習以前學過的數列DP框架, 並且以費式數列、爬樓梯、骨牌拚接的應用與遞迴數列概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 數列DP與遞迴數列常見的形式 如果是遞迴數列,常常看到以函數型式表達
Thumbnail
這篇文章,會帶著大家複習以前學過的數列DP框架, 並且以費式數列、爬樓梯、骨牌拚接的應用與遞迴數列概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 數列DP與遞迴數列常見的形式 如果是遞迴數列,常常看到以函數型式表達
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
Thumbnail
巢狀迴圈For loop介紹結構及範例說明 巢狀迴圈 巢狀迴圈是在一個迴圈內包含另一個迴圈的結構 簡單來說,就是內迴圈做完,才會在跑到外迴圈,接著在做內迴圈
Thumbnail
巢狀迴圈For loop介紹結構及範例說明 巢狀迴圈 巢狀迴圈是在一個迴圈內包含另一個迴圈的結構 簡單來說,就是內迴圈做完,才會在跑到外迴圈,接著在做內迴圈
Thumbnail
C# 迴圈(C# 教學) – for loop 可以說是程序編寫的基本功. 運用LOOPING可以減少程式碼, 只需透過for內的BLOCK, 就可把程式碼重用, 避免要不停把程序碼重覆. 以下我會介紹迴圈的結構, 運行方式, 如何離開迴圈, 以及迴圈的種類. 2) 迴圈的種類 3) 迴圈的用法
Thumbnail
C# 迴圈(C# 教學) – for loop 可以說是程序編寫的基本功. 運用LOOPING可以減少程式碼, 只需透過for內的BLOCK, 就可把程式碼重用, 避免要不停把程序碼重覆. 以下我會介紹迴圈的結構, 運行方式, 如何離開迴圈, 以及迴圈的種類. 2) 迴圈的種類 3) 迴圈的用法
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News