请确认这段Java代码实现的是插入排序还是选择排序?
插入排序代码的确认与修正
你提供的代码核心逻辑属于插入排序,但存在冗余代码和可优化点,下面具体拆解说明:
1. 核心逻辑符合插入排序定义
插入排序的核心是:将未排序部分的当前元素,向前逐个与已排序序列元素比较,插入到合适位置。你的代码完全匹配这个逻辑:
- 外层循环从
i=1开始(默认第一个元素为已排序),取出current = arr[i]作为待插入元素 - 内层循环从
j=i-1向前遍历已排序序列,若current < arr[j]则交换位置,直到找到正确插入点
2. 代码中的问题与优化
冗余代码(直接删除即可)
if(current>arr[i]){ current=arr[i]; }
这行毫无意义,因为current已经被赋值为arr[i],该判断永远不成立。
优化后的插入排序实现(减少交换次数)
原代码每次比较都交换元素,可改为先移动大元素,最后再插入current,效率更高:
public class InsertionSort { // 优化后的插入排序方法 public static void insertionSort(int arr[]) { System.out.println(); for (int i = 1; i < arr.length; i++) { int current = arr[i]; int j = i - 1; // 将比current大的元素向后移动 while (j >= 0 && current < arr[j]) { arr[j + 1] = arr[j]; j--; } // 插入current到正确位置 arr[j + 1] = current; } // 打印排序结果 System.out.print("Sorted array: "); for (int num : arr) { System.out.print(num + " "); } } public static void main(String args[]) { System.out.print("Original array: "); int arr[] = {7, 8, 3, 1, 2}; for (int num : arr) { System.out.print(num + " "); } insertionSort(arr); } }
3. 插入排序与选择排序的快速区分
- 插入排序:逐个将未排序元素插入到已排序序列的对应位置,类似整理手牌的过程
- 选择排序:每次从待排序部分找出最值元素,放到已排序部分的末尾,核心是"选择最值"
内容的提问来源于stack exchange,提问作者user28471999
相关产品推荐
相关产品推荐

