public static void insertionSort(int[] a) {
for(int i = 1; i < a.length; i++) {
int minVal = a[i];
int checkIdx = i-1;
while(checkIdx >= 0 && minVal < a[checkIdx]) {
a[checkIdx + 1] = a[checkIdx];
checkIdx--;
}
a[checkIdx + 1] = minVal;
}
}
这是我迭代插入排序的解决方案,但我想要的是递归地转换代码。我试过了,但我被困在了一个地方。
public static void insertionSort(int[] arr, int i, int n)
{
int value = arr[i];
int j = i;
// Find index j within the sorted subset arr[0..i-1]
// where element arr[i] belongs
while (j > 0 && arr[j - 1] > value)
{
arr[j] = arr[j - 1];
j--;
}
arr[j] = value;
// Note that subarray arr[j..i-1] is shifted to
// the right by one position i.e. arr[j+1..i]
if (i + 1 <= n) {
insertionSort(arr, i + 1, n);
}
}
我陷入了while循环部分,如何将它递归地转换为??
2条答案
按热度按时间cwtwac6a1#
好的,我已经解决了,谢谢你帮我。
roqulrg32#
你就快到了。只有一件事。你需要在某个时刻突破递归。这就是数组被排序并且i+1==n的条件。非常轻微的编辑代码。原来的数组是{4,2,7,8,1,9,3,5,6,0},最后进行排序。
提供以下输出。