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

2024/01/04閱讀時間約 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每一個元素的資料,在印出

印出結果

印出結果

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




49會員
86內容數
Python程式設計師,不是在學習就是在學習的路上
留言0
查看全部
發表第一個留言支持創作者!