巢狀迴圈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= 第幾圈,內迴圈跑十次印出@的符號
由此簡單範例說明,兩層的巢狀迴圈結構運作流程
泡沫排序(英語: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--) 遞減
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;
在把暫存第一個元素的資料,塞到第二個元素去
以上方法,就完成第一個元素跟第二個元素交換資料
//依序取出 經過bubble sort演算法整理後的資料
for (int i=0;i < data_len;i++)
{
printf("data[%d]=%d\n",i,data[i]);
}
由先前定義好的data_len
資料長度來設定迴圈的次數,利用for迴圈的特性依序取出data每一個元素的資料,在印出