[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
128會員
213內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
IF,Switch,三元運算子語法說明 IF條件選擇結構說明 IF為布林條件,當()內條件式滿足True執行if區塊的程式碼,不滿足則執行else區塊的程式碼,若無else也行。
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
IF,Switch,三元運算子語法說明 IF條件選擇結構說明 IF為布林條件,當()內條件式滿足True執行if區塊的程式碼,不滿足則執行else區塊的程式碼,若無else也行。
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
你可能也想看
Google News 追蹤
Thumbnail
這篇內容,將會講解什麼是「repeat迴圈」,以及與「repeat迴圈」相關的知識。包括repeat迴圈的簡介、break、continue。
Thumbnail
這篇內容,將會講解什麼是「while迴圈」,以及與「while迴圈」相關的知識。包括while迴圈的簡介、while迴圈、break、continue。
Thumbnail
積雲悶雷響無間 雨行萬物盡馳遍 澤潤山河新氣象 難淨滌慾程迴圈
Thumbnail
for loop、while loop、repeat
Thumbnail
大家都在用的 Threads Circle 是什麼?本文將介紹Threads Circle的完整資訊。
※ 迴圈控制的兩個指令:break(跳脫)、continue(繼續) break(跳脫):當遇到一個需要強制脫離迴圈的情境,使用break(跳脫)就會直接跳出迴圈。 continue(繼續):用於跳過迴圈目前的迭代,直接開始下一次迭代的執行。 造成無限迴圈的例子: 說明: 當 x 的值
※ 何謂巢狀迴圈(NESTD LOOP): 指的是一個迴圈內包含另一個迴圈的結構。在程式設計中,這種結構常用於需要進行多層次迭代的場合,例如處理多維數組、逐行逐列處理表格資料等。 ※ 例子:九九乘法表 說明: 外層迴圈:for (let i = 1; i <= 9; i = i + 1) 這
※ 迴圈(for loop)介紹: 迴圈的用途是重複執行程式碼,只要條件滿足,就會執行特定的動作。 for (let i = 0; i < 10; i = i + 1) { console.log(i); } 說明: for:對於。 let:因為迭代器的數值會一直改變所以要用let
Thumbnail
這篇內容,將會講解什麼是「repeat迴圈」,以及與「repeat迴圈」相關的知識。包括repeat迴圈的簡介、break、continue。
Thumbnail
這篇內容,將會講解什麼是「while迴圈」,以及與「while迴圈」相關的知識。包括while迴圈的簡介、while迴圈、break、continue。
Thumbnail
積雲悶雷響無間 雨行萬物盡馳遍 澤潤山河新氣象 難淨滌慾程迴圈
Thumbnail
for loop、while loop、repeat
Thumbnail
大家都在用的 Threads Circle 是什麼?本文將介紹Threads Circle的完整資訊。
※ 迴圈控制的兩個指令:break(跳脫)、continue(繼續) break(跳脫):當遇到一個需要強制脫離迴圈的情境,使用break(跳脫)就會直接跳出迴圈。 continue(繼續):用於跳過迴圈目前的迭代,直接開始下一次迭代的執行。 造成無限迴圈的例子: 說明: 當 x 的值
※ 何謂巢狀迴圈(NESTD LOOP): 指的是一個迴圈內包含另一個迴圈的結構。在程式設計中,這種結構常用於需要進行多層次迭代的場合,例如處理多維數組、逐行逐列處理表格資料等。 ※ 例子:九九乘法表 說明: 外層迴圈:for (let i = 1; i <= 9; i = i + 1) 這
※ 迴圈(for loop)介紹: 迴圈的用途是重複執行程式碼,只要條件滿足,就會執行特定的動作。 for (let i = 0; i < 10; i = i + 1) { console.log(i); } 說明: for:對於。 let:因為迭代器的數值會一直改變所以要用let