首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言陣列應用經典範例:插入排序、二維陣列最大值、字串排序

     編輯:關於C語言
 

範例 7-18:有序陣列插入整數

將一整數按大小插入已排序(由大到小)陣列。演算法:

  1. 比較插入值與陣列元素,找到第一個比它小的元素索引 i。
  2. 從陣列尾端起,將 i 及之後元素依序後移一位。
  3. 將插入值放入 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 之間。

範例 7-19:二維陣列各行最大值組成一維陣列

陣列 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 之誤)。

範例 7-20:五國名稱字母序排序

用二維字元陣列 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 碼比較。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved