將一整數按大小插入已排序(由大到小)陣列。演算法:
i。i 及之後元素依序後移一位。a[i]。若所有元素皆大於插入值,則放入最後位置。#include <stdio.h>
int main() {
int i, j, p, q, s, n, a[11] = {127,3,6,28,54,68,87,105,162,18};
// 先由大到小排序
for (i=0; i<10; i++) {
p=i; q=a[i];
for (j=i+1; j<10; j++)
if (q < a[j]) { p=j; q=a[j]; }
if (p!=i) { s=a[i]; a[i]=a[p]; a[p]=s; }
printf("%d ", a[i]);
}
printf("\ninput number:\n");
scanf("%d", &n);
// 插入邏輯
for (i=0; i<10; i++)
if (n > a[i]) {
for (s=9; s>=i; s--) a[s+1] = a[s];
break;
}
a[i] = n;
for (i=0; i<=10; i++) printf("%d ", a[i]);
return 0;
}
輸入 47,結果插入於 54 與 28 之間。
陣列 a[3][4],求每行最大值存入 b[3]。雙重迴圈:外層逐行,內層比較該行各列,最大值存入 b[i]。
int a[][4] = {{3,16,87,65},{4,32,11,108},{10,25,12,27}};
int b[3], i, j, l;
for (i=0; i<=2; i++) {
l = a[i][0];
for (j=1; j<=3; j++)
if (a[i][j] > l) l = a[i][j];
b[i] = l;
}
結果:b = {87, 108, 37}(原文 37 為 27 之誤)。
用二維字元陣列 cs[5][20] 存放國名,視為 5 個一維字串。以 strcmp 比較、strcpy 交換,選擇排序法完成。
char st[20], cs[5][20];
for (i=0; i<5; i++) gets(cs[i]);
for (i=0; i<5; i++) {
p=i; strcpy(st, cs[i]);
for (j=i+1; j<5; j++)
if (strcmp(cs[j], st) < 0) { p=j; strcpy(st, cs[j]); }
if (p!=i) { strcpy(st, cs[i]); strcpy(cs[i], cs[p]); strcpy(cs[p], st); }
puts(cs[i]);
}
說明:gets 讀取含空格字串,strcmp 依 ASCII 碼比較。