2012-10-31 36 views
0

我想寫的各種C++中的排序算法,然後在僞代碼寫出來沿着後,現在在僞寫它是不是太不好,然而在我腦海中變得更糟,所以我給你們提出了這樣一個問題:C編寫一個簡單的排序算法++,用僞代碼版本

我正在創建一個算法,需要一個未排序的數組,以及兩個整數(讓我們說B和C)和輸出TRUE,如果A包含一個元件,其既不同於B和少大於C,否則返回FALSE。

For J <-- 1 to Length[A] 
     Count <-- j+1 
       while Count =< Length[A] 

這是我的僞代碼開始,看到這似乎是順理成章的事情有開始,然後在C實現它++,但是我發現自己轉圈圈創建循環,並沒有發出很大的進步。希望我所說的一切都合情合理,有人可以將它們放在一起來創造某種形式的解決方案。謝謝。

+0

請問'的std :: sort'工作? – andre

+2

我不明白這與排序有關。首先你說你想排序一個數組,但是你說你只是想知道是否存在大於B且小於C的元素。 –

+0

對不起,它不清楚,上面的代碼不是C++,它是一種僞代碼,因此'< - ',我需要與數組中的元素進行比較,如果數組包含大於B且小於C的元素,則爲TRUE,否則爲FALSE, – Unknown

回答

1

從我記得史蒂夫麥康奈爾的代碼完整,你的僞代碼應該看起來更像英文而不是它。我愚蠢的看法你跳得太快而無法實施。

這個什麼:

for each element in array 
    check to see if element is between B and C 
    if element is between B and C 
     return TRUE 
    else 
     continue loop 
next 

return FALSE 

這就是我從你的陳述收集:

我期待用兩個整數創建一個算法,需要一個排序的數組,沿着 (讓說B和C),並輸出TRUE,如果A包含 元件,其既大於B和小於C,否則 返回FALSE。

+0

這有點類似是的,不幸的是,我們已經教過這種奇怪的僞代碼風格,因此我似乎無法找到任何信息來幫助我,除了分發的資源外,這實在是遠遠不夠的哦 – Unknown

+0

哦好。我不熟悉僞代碼的這種方法。但在實踐中,我認爲如果你在理解僞代碼時遇到問題,那麼它並不是真的在做它的工作。它應該*幫助你明確你的邏輯,而不是進一步隱藏它。 – John

1

我會用一個函數開始檢查你所關心的條件:給定一個數字,它落在指定的範圍內:

boolean function in_range(A, B, C) { 
    return (A > B) and (A < C); 
} 

從那裏,它成爲掃描一個簡單的事情通過陣列和調用該函數,傳遞數組的每個元素作爲A(以及B和任何作爲BCC)。如果函數在任何時候返回true,你可以停止掃描和外部函數返回true,以及(對於它的價值,C++ 11這種情況提供了std::any_of)。

+0

謝謝,這些帖子都幫助我用C++編寫代碼,我想從那裏我可以用我們已經顯示的僞代碼風格編寫而沒有太多的麻煩。感謝您的建議 – Unknown

0

你只是尋找符合條件X>乙& & X < C.線性搜索會做陣列內部的X - 如果你打算做搜索只有一次。如果搜索必須做多次(什麼比日誌更數組(size))的話很有道理先進行排序,然後做一個二進制搜索。

bool InRangeSearch(low, high) 
{ 
    index = upper_bound(array, low); 
    if(index==-1) 
    return false; 

    index2 = lower_bound(array, high); 
    if(index2==-1) 
    return true; 

    return ((index2-1)>index); 
} 
0

僞代碼:

Quicksort(A as array, low as int, high as int) 
    if (low < high) 
     pivot_location = Partition(A,low,high) 
    Quicksort(A,low, pivot_location - 1) 
    Quicksort(A, pivot_location + 1, high) 

Partition(A as array, low as int, high as int) 
    pivot = A[low] 
    leftwall = low 

    for i = low + 1 to high 
     if (A[i] < pivot) then 
      leftwall = leftwall + 1 
      swap(A[i], A[leftwall]) 

    swap(A[low],A[leftwall]) 

    return (leftwall) 

程序代碼:爲您

#include <stdio.h> 

void quickSort(int[], int, int); 
int partition(int[], int, int); 


int main() 
{ 
    int a[] = { 7, 12, 1, -2, 0, 15, 4, 11, 9}; 

    int i; 
    printf("\n\nUnsorted array is: "); 
    for(i = 0; i < 9; ++i)  printf(" %d ", a[i]); 

    quickSort(a, 0, 8); 

    printf("\n\nSorted array is: "); 
    for(i = 0; i < 9; ++i)  printf(" %d ", a[i]); 

    printf("\n\n "); 
    return 0; 

} 



void quickSort(int a[], int l, int r) 
{ 
    int j; 

    if(l < r) 
    { 

     j = partition(a, l, r); 
     quickSort(a, l, j-1); 
     quickSort(a, j+1, r); 
    } 

} 



int partition(int a[], int l, int r) { 
    int pivot, i, j, t; 
    pivot = a[l]; 
    i = l; j = r+1; 

    while(1) 
    { 
    do ++i; while(a[i] <= pivot && i <= r); 
    do --j; while(a[j] > pivot); 
    if(i >= j) break; 
    t = a[i]; a[i] = a[j]; a[j] = t; 
    } 
    t = a[l]; a[l] = a[j]; a[j] = t; 
    return j; 
}