1. 程式人生 > >已知順序表L中的元素為int,請寫一時間複雜度O(n)、空間複雜度為O(1)的程式,將L中的奇數元素排在前面,偶數元素排在後面

已知順序表L中的元素為int,請寫一時間複雜度O(n)、空間複雜度為O(1)的程式,將L中的奇數元素排在前面,偶數元素排在後面

Status exchangeEvenOddNumbers(SeqList &S){
    int j = 0,k = 0;
    for(int i = 0;i<=S.last;i++){
        if(S.elem[i]%2 == 1){
            k = S.elem[j];
            S.elem[j] = S.elem[i];
            S.elem[i] = k;
            j++;
        }else{
            continue;
        }
    }
    return OK;
};

演算法分析,由於時間複雜度為n,所以只能出現一個for迴圈;空間複雜度為1,只能使用原有順序表記憶體空間;

定義變數 j ,始終記錄順序表中第一個非奇數(也就是第一個偶數唄) 的下標;定義中間變數 k ,臨時儲存第一個非奇數的值,與查詢到的奇數的值進行互換;

整體思路:從頭查詢,只要查詢到奇數,就和第一個非奇數交換位置,因為只有一個 for 迴圈 , 所以時間複雜度為1;