我只是写了下面的代码,我不确定它是否是java中插入排序的正确实现(它看起来太类似于冒泡排序,我不敢肯定)。
public static void insertionsort (int[] arr){
int temp;
for (int i = 0; i<arr.length; i++){
for (int j = i+1; j>=0; j--){
if (arr[j]<arr[j-1]){
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
}
当我将我的解决方案与在线解决方案进行比较时,我注意到它们都使用一个变量来存储arr[i]。例如:
void sort(int arr[])
{
int n = arr.length;
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
这个关键变量的用途是什么?不是有点多余吗?
1条答案
按热度按时间aiqt4smr1#
key变量的作用是保存将插入到内部循环之后的排序位置的值。现在看来,您的解决方案对于插入排序还不够有效。