java - 这是 Java 插入排序的代码吗?为什么要使用额外的变量?
问题描述
我刚刚编写了以下代码,我不确定它是否是 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;
}
}
这个关键变量的目的是什么?是不是有点多余?
解决方案
关键变量的目的是保存将在内部循环之后插入到其排序位置的值。现在看来,您的解决方案不足以用于插入排序。
推荐阅读
- javascript - 在 ES6 中单击时在当前类元素上切换样式
- python - 创建错误条件:google.api_core.exceptions.NotFound: 404 Not found: URI
- jquery - SharePoint 2013 REST API Query Throws an Error Every Time I Try to Set a Variable to a Returned Value
- c - C 打印的整数与它在 Watches 上显示的数字不同。这是为什么?
- sql - ORA-01403: 未找到数据 ORA-06512
- android - 使用片段测试的片段测试错误:无法实例化检测
- c++ - C++ - Why isn't the unicode output correct?
- cloud - 如何确保谷歌计算引擎上的防篡改/防篡改启动盘?
- sql - T-SQL query to summarize sales for ALL YEARS: with total per month per year, and cumulative monthly amounts
- pyspark - PySpark - Inseroverwrite - 文件已存在异常