2016-11-11 34 views
1

我需要對數組進行排序,而這意味着輸入值,雖然用戶輸入的數字數組需要自行解決:我所做的到目前爲止是這樣的:數組排序同時輸入值

void MoveRight(int *a,int n, int startIndex) 
{ 
    int j,temp; 
    j=n-1; 
    for(int i=startIndex;i<n;i++) 
    { 
      temp = a[j]; 
      a[j]=a[i]; 
      a[i]=temp; 
    } 
} 

void InsertionSort(int *a,int n) 
{ 
    int i,number,j; 
    printf("Enter %d numbers for the array\n",n); 
    for(i=0;i<n;i++) 
    { 
     scanf("%d",&number); 
     for(j=0;j<=i;j++) 
     { 
      if(number<a[j]) 
      { 
       MoveRight(a,n,j); 
       a[j]=number; 
       break; 
      } 
     } 
    } 
} 

進入後:1,3,2,4,5

我得到的數組是:-858993460,-858993460,-858993460,-858993460,-858993460

+1

什麼是'a'?發佈'InsertionSort'的調用 – LPs

+1

數組'a'中的初始值是什麼?當你輸入1時,只有當數組中的任何元素大於1時,它纔會進入數組。在你的輸出中,數組包含小於'1'的-858993460,因此沒有值存儲在數組中 – Swanand

+1

需要修改'InsertionSort'的算法 – Swanand

回答

0

應用選擇那種你應該首先進入所有數組中的元素。

這些循環

for(i=0;i<n;i++) 
{ 
    scanf("%d",&number); 
    for(j=0;j<=i;j++) 
    { 
     if(number<a[j]) 
     { 
      MoveRight(a,n,j); 
      a[j]=number; 
      break; 
     } 
    } 
} 

已經導致不確定的行爲,因爲當ij都等於0,那麼a[j]具有不確定的值。此外,如果條件number<a[j]未評估爲true,則不會向該陣列添加任何內容。

功能MoveRight沒有意義,因爲在循環變量j沒有改變。

j=n-1; 
for(int i=startIndex;i<n;i++) 
{ 
     temp = a[j]; 
     a[j]=a[i]; 
     a[i]=temp; 
} 

這是一個演示程序,顯示如何完成任務。

#include <stdio.h> 

void MoveRight(int *a, int n, int i) 
{ 
    for (; n != i; --n) a[n] = a[n-1]; 
} 

#define N 10 

int main(void) 
{ 
    int a[N]; 

    printf("Enter %d numbers for the array: ", N); 

    for (int i = 0; i < N; i++) 
    { 
     int value; 

     scanf("%d", &value); 

     int j = 0; 
     while (j < i && !(value < a[j])) j++; 

     MoveRight(a, i, j); 
     a[j] = value; 
    } 

    for (int i = 0; i < N; i++) printf("%d ", a[i]); 
    printf("\n"); 

    return 0; 
} 

程序輸出可能如下方式

Enter 10 numbers for the array: 5 2 3 9 8 1 6 7 4 0 
0 1 2 3 4 5 6 7 8 9 

考慮到,對於大型陣列是更好的使用二進制搜索,而不是順序查找,找到位置插入到何處下一個值。

+0

這不是我的意思。我想要的是:當用戶輸入數組需要排序的每個值自我 – user6219654

+0

@ user6219654我的程序做什麼?用戶輸入的每個值都放在數組中的正確位置。 –

+0

對不起,我以爲我可能能夠在我的腦海中調試它,但我失敗了。執行你的代碼後,我發現你是對的:(謝謝你的幫助 – user6219654