1. 程式人生 > 其它 >2021-2-5語法基礎一字元陣列

2021-2-5語法基礎一字元陣列

技術標籤:課堂筆記

基於比較的排序演算法

氣泡排序

演算法思想

  • 經過n-1輪冒泡
    • 從第1個元素開始,跟後面相鄰得元素進行比較,如果是逆序關係就交換

插入排序

演算法思想

  • 從第2個數開始
    • 跟前面相鄰的元素進行比較,如果是逆序就交換;否則繼續進行下一個數的插入

演算法的時間複雜度

核心是演算法中指令的執行次數的隨著問題規模趨近與無窮大的變化趨勢。

演算法最好情況最壞情況平均情況
氣泡排序 O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2)
插入排序 O ( n ) O(n) O(n) O ( n 2 ) O(n^2)
O(n2)
O ( n 2 ) O(n^2) O(n2),實際情況是好於 O ( n 2 ) O(n^2) O(n2)

字元陣列

int a[1000];
double d[30010];
char c[30010];

c5012 - 迴文字串

演算法思想

  • 讀入一個長度為n字串
  • 從0到n/2遍歷每個字元c[i]
    • 如果c[i] != c[n - i -1],不是迴文串
  • 全部相同,是迴文串
/*
abcba
abccba
第1個和倒數第1個相同
第2個和倒數第2個相同
第3個和倒數第3個相同
...
第i個和倒數第i個不同,就不是迴文串
0 -> n - 1
1 -> n - 2
2 -> n - 3
...
i -> n - i - 1
*/
#include <iostream> using namespace std; char c[1010]; int main() { char ch; //表示字元在陣列中存放位置,輸入結束n也儲存了輸入字元的個數 int n = 0; while(cin >> ch) //不停地輸入,直到輸入結束為止 { c[n] = ch; //把ch存放到陣列下標為n的位置 n ++; //n後移一個位置 } //從下標為0的字元開始遍歷,直到n/2 for(int i = 0; i <= n /
2; i ++) { //如果下標為i的字元和下標為n - i - 1的字元不同,就不是迴文串 if(c[i] != c[n - i - 1]) { cout << "No" << endl; return 0; //結束程式 } } //全部相同 cout << "Yes" << endl; return 0; }

c5012 - 字元替換

演算法思想

  • 輸入一串字元,其中包含空格
  • 遍歷每個字元,如果是字元A,將其替換成字元B
#include <iostream>
#include <cstdio>
using namespace std;
char c[1010];

int main()
{
    int n = 0;
    //輸入一串字元,儲存到陣列中
    //輸入一個字元,字元可以是空格、換行
    char ch = getchar();
    while(ch != '\n') // '\n'表示換行符,\是轉義字元
    {
        c[n] = ch;
        n ++;
        ch = getchar(); //繼續輸入下一個字元
    }
    
    char a, b;
    cin >> a >> b;
    for(int i = 0; i < n; i ++)
    {
        //如果是字元a,輸出字元b
        if(c[i] == a) cout << b;
        //否則原樣輸出
        else cout << c[i];
    }    
    return 0;
}

c5015 - 最長單詞

演算法思想

  • 讀入若干個單詞
    • 計算單詞長度,對於最後一個單詞,長度應該減1
    • 打擂臺求最長單詞,更新最大長度,儲存最長單詞
#include <iostream>
#include <cstring>
using namespace std;
//a陣列儲存讀入單詞
//b陣列儲存最長單詞
char a[210], b[210];

int main()
{
    int max = 0;
    //讀入一個不包含空格的單詞,直到輸入結束
    while(cin >> a)
    {
        //獲取單詞a的長度
        int len = strlen(a);
        //判斷a是不是最後一個單詞,長度減1
        if(a[len - 1] == '.') len --; //注意不要寫成len - 1
        //求最後一個最長單詞
        if(len >= max)
        {
            max = len;
            //b = a; 陣列是不可以直接通過等號賦值的
            //將最長單詞儲存到b陣列中
            for(int i = 0; i < max; i ++)
                b[i] = a[i];
        }
    }    
    //對於字元陣列來說,可以使用cout直接輸出b陣列的字串
    cout << b << endl;    
    return 0;
}