[英]My logic of insertion sort seems right but does not work
我正在嘗試實現插入排序。
public int[] insertionSort(int[] a) {
for(int i=0; i<a.length;i++) {
int j=i+1;
while(a[j] < a[i] && j < a.length) {
swap(a[j],a[i]);
j--;
i--;
}
}
return a;
}
public void swap(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
(就輸出結果而言)是否在技術上與我說j = i-1並在條件循環中從j <a.length到j> = 0代替條件相同?
您不能以這種方式交換值,因為參數正在傳遞值,而不是對值的引用。
您最好不要使用單獨的交換方法,例如這樣(還必須增加而不是減少i
和j
值):
public int[] insertionSort(int[] a) {
int temp;
for(int i=0; i<a.length;i++) {
int j=i;
while(j > 0 && a[j-1] > a[j]) {
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
j--;
}
}
return a;
}
編輯 :必須再次更新-while循環中的條件順序錯誤,因此它將在檢查數組是否到達數組末尾之前查找數組的下一個索引。
編輯2 :如評論中所述,我將展示如何編寫一個實際有效的swap
方法-而不是傳遞值,您必須傳遞整個數組並在之后返回它。 我可能仍然建議以上述方式進行此操作,但僅出於教育目的:
public int[] insertionSort(int[] a) {
for(int i=0; i<a.length;i++) {
int j=i;
while(j > 0 && a[j-1] > a[j]) {
a = swap(a, j-1, j);
j--;
}
}
return a;
}
public int[] swap(int[] a, int index1, int index2) {
int temp = a[index1];
a[index1] = a[index2];
a[index2] = temp;
return a;
}
編輯3 :正在做一些愚蠢的事情,還沒有完全確定插入順序。 全部排序(對雙關語表示敬意)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.