2013-10-05 66 views
-3

在輸入我不得不指定數組以及它的元素和輸出應該是在下面插入排序作業

輸入給出的形式

5 
2 4 6 8 3 

樣本輸出

2 4 6 8 8 
2 4 6 6 8 
2 4 4 6 8 
2 3 4 6 8 

這是我的輸出

2 4 6 8 8 
2 4 6 6 8 
2 4 4 6 8 
2 4 3 6 8 
2 3 3 6 8 
2 3 3 6 8 

int main() {  

    int* a=0; 
    int n,x; 
    std::cout<<"Enter size "; 
    std:: cin>>n; 
    std::cout<<"Enter elements "; 
    a=new int[n]; 

    for(int i=0;i<n;i++){ 
     std::cin>>x; 
     a[i]=x; 
    } 

    int q=a[n-1]; 
    for(int i=n;i>=0;i--){ 
     if(a[i-2]>q) 
     { a[i-1]=a[i-2]; 
     }else 
      a[i]=q; 

     for(int j=0;j<n;j++) 
     { std::cout<<a[j];cout<<" "; 
     } 
     cout<<" \n "; 
    } 

    //for(int j=0;j<n;j++){std::cout<<a[j];} 
    getch();    
} 

我在做什麼錯?

+8

找出你的作業的一部分,我會說... –

+1

嘗試鉛筆和紙。用手仔細操作幾個輸入。 – molbdnilo

+0

是的,所以我從頭開始,用紙和筆,悲傷地得到格式問題,我無法解決。 – Angersmash

回答

2

由於i一直下降到0。然後i-2可以去-2。該陣列,這是不確定的行爲開始之前,因此這條線指標:

if(a[i-2]>q) 

這裏你無需記住什麼舊值分配在數組中的值。

}else 
     a[i]=q; 

因此,您正在失去信息,因此出現了一些問題,因爲排序不應該破壞信息。