Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-16   C C 語言技術 <201910>   瀏覽次數:次   DMCA.com Protection Status

C語言 - 第十二章 | 循環演算 - 陣列

什麼是陣列?

陣列資料結構(英語:array data structure),簡稱陣列(英語:Array),是由相同類型的元素(element)的集合所組成的資料結構,分配一塊連續的記憶體來儲存。利用元素的索引(index)可以計算出該元素對應的儲存位址。


一維陣列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main()
{
int i, array[5];

for (i = 0; i < 5; i++) {
printf("%d:", i);
scanf("%d", &array[i]);
}

printf("\n");
for (i = 0; i < 5; i++) {
printf("%d:%d\n", i, array[i]);
}

return 0;
}


二維陣列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

int main()
{
int i, j, grade\[5]\[3];

for (i = 0; i < 5; i++) {
for (j = 0; j < 3; j++) {
printf("%d,%d:", i, j);
scanf("%d", &grade[i][j]);
}
}
printf("\n");

while (1) {
printf("please input 0~4: ");
scanf("%d", &i);
if (i > -1 && i < 5) {
printf("English:%d\n", grade[i][0]);
printf("Chinese:%d\n", grade[i][1]);
printf("ComputerScience:%d\n", grade[i][2]);
}
}

return 0;
}

泡沫排序法

泡沫排序法是最容易學與最容易實作的排序法,如圖所示,假設我們要將陣列由小排到大,首先比前兩個,若前一個比較大則交換,接著比較二三個,若前面比較大則交換,直到將最大的排到最後面,在從頭進行一次排出次大的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>

int main()
{
int i, j, k, temp;
int test[5] = { 4,3,2,5,1 };
for (i = 0; i < 5 - 1; i++) {
for (j = 0; j < 5 - i - 1; j++) {
//see progress
printf("\ni,j:%d,%d : ", i, j);
for (k = 0; k < 5; k++) {
printf("%d ", test[k]);
}
//end
if (test[j] > test[j + 1]) {
temp = test[j];
test[j] = test[j + 1];
test[j + 1] = temp;
printf("swap");
}
}
}
//see end
printf("\nend : ");
for (k = 0; k < 5; k++) {
printf("%d ", test[k]);
}
//end
return 0;
}


選擇排序法

選擇排序法直接找到最大的數的位子,將其放置正確的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int main()
{
int i, j, k, temp, num;
int test[5] = { 4,3,2,5,1 };
for (i = 4; i > -1; i--) {
//see progress
printf("\n%d : ", 5 - i);
for (k = 0; k < 5; k++) {
printf("%d ", test[k]);
}
//end
num = 0;
for (j = 0; j < i + 1; j++) {
if (test[num] < test[j]) {
num = j;
}
}
temp = test[num];
test[num] = test[i];
test[i] = temp;
}
//see end
printf("\nend:");
for (k = 0; k < 5; k++) {
printf("%d ", test[k]);
}
//end
return 0;
}


註:以上參考了
hackersir gitbooks