2017-11-10 72 views
0

有人可以解釋爲什麼這是行不通的?
例如,如果我有這個數組:3 4 1 2 55 32 1111 53
輸出將是3 3 3 4 32 53 55 1111.
謝謝!如何寫插入排序

void insertionSort(int arr[], int len) { 
int i, j, tmp; 
for (i = 1; i < len; i++) { 
    tmp = arr[i]; 
    for (j = i - 1; j >= 0; j--) { 
     if (arr[j] > tmp) { 
      arr[j + 1] = arr[j]; 
     } 
     else { 
      arr[j + 1] = tmp; 
      break; 
     } 
    } 
}} 
+3

調試器。使用調試器。調試器將允許您單步執行您的程序*觀察變量中的值。使用調試器通常比將正確發佈到StackOverflow的速度快,*等待有人檢查您的代碼或爲您進行調試。請使用調試會話的文本編輯您的文章。 –

+2

關閉頂部,您永遠不會分配給'arr [0]'。這是不對的。 –

+1

爲了獲得最佳效果,請時尚[mcve]。你應該考慮或不考慮堆棧溢出問題,因爲隔離問題產生MCVE的行爲經常會揭示其所有錯誤的榮耀中的原因。 – user4581301

回答

1

您發佈的內容不是維基百科僞代碼的真實翻譯。

void insertion_sort(int arr[], const int len) { 
    for (int i = 1; i < len; ++i) { 
     int x = arr[i]; 
     int j = i-1; 
     while((j >= 0)&&(arr[j] > x)) { 
      arr[j + 1] = arr[j]; 
      j = j-1; 
     } 
     arr[j+1] = x; 
    } 
} 

歡迎來到StackOverlow。在發佈其他問題之前,請閱讀關於Asking的所有鏈接。特別注意一個關於MCVE

+0

非常感謝!你能否告訴我我的「翻譯」出了什麼問題?我很好奇。 while循環可以寫成for循環嗎?我正在嘗試學習新的算法,如果你能告訴我什麼是錯的,我將非常感激。 – puls99

+0

試試這個。實現這兩種算法,insert_sort和bad_insertion_sort。儘管每個調試器都使用相同的輸入。注意它們在哪裏分歧。 –