2015-06-05 40 views
0

這是插入排序程序的摘錄。以下給出三個代碼片段,它們是相同功能的不同版本,並且應該給出相同的輸出;不幸的是,只有第二和第三代碼片段給出了預期的輸出。爲什麼代碼片段1的行爲不同?第一個代碼片段輸出與第二和第三代碼不同的可能原因是什麼?

int find_smallest_index(int get_array[],int size,int left_index) //1st   
{ 
    int index_of_smallest_value; 
    for(int right_index=left_index+1;right_index<size;right_index++) 
     { 
     if(get_array[right_index]<get_array[left_index]) 
     {index_of_smallest_value=right_index;} 
     } 
    return index_of_smallest_value; 
} 


int find_smallest_index(int get_array[],int size,int left_index) //2nd   
{ 

    for(int right_index=left_index+1;right_index<size;right_index++) 
    { 
     if(get_array[right_index]<get_array[left_index]) 
     {left_index=right_index;} 
    } 
    return left_index; 
} 



int find_smallest_index(int get_array[],int size,int left_index) //3rd   
{ int index_of_smallest_value=left_index; 
    for(int right_index=left_index+1;right_index<size;right_index++) 
    { 
     if(get_array[right_index]<get_array[index_of_smallest_value]) 
     {index_of_smallest_value=right_index;} 
    } 
    return index_of_smallest_value; 
} 
+1

如果循環從不執行,則第一個示例會返回未初始化的結果。我的意思是,如果left_index + 1不小於size,index_of_smallest_value將不會被設置。 – drescherjm

回答

1
  • 第一個片段定義了未初始化的變量​​在函數,將其設置爲一些條件,並將其返回。它在基於函數參數或局部變量返回東西的意義上是好的,但如果條件從未如此,它就會出現問題。

  • 第二個&第三個片段與第一個不同,因爲如果條件從不爲真,它們將返回某個全局變量的值。它們有相反的優勢&它的弱點。


你可能會考慮重新設計的功能,使之具有兩個屬性 - 它僅依靠投入,但它總是返回定義良好的輸出。

1

index_of_smallest_value在第一種情況下沒有初始化,所以當for循環沒有執行時,你有沒有結果。

相關問題