图解插入排序
插入排序,见名知意思,就是将元素插入到它应该待的位置,来实现排序。什么叫应该待的位置呢?通俗点说,插入排序的原理是将一个元素插入到有序数组,不断地扩展有序数组的长度实现整个数组的有序。
插入排序进行的移位操作有两个:
1、是将要插入元素清除,其他与有序数组无关元素后移
2、是在找到了插入位置之后的插入动作涉及的移位
寻找插入位置的时候要注意:
在有序数组中从上往下检索,一旦找到匹配的一定要终止寻找,因为有序数组是逆序的,上面位置符合判断条件则下一个位置一定也符合判断条件,会导致位置定位错误。
示例代码:
int[] arr = new int[]{3, 5, 11, 2, 8}; for (int i=0; i< arr.length-1; i++){ int insertEle = arr[arr.length-1]; int sortArrLimit = i; int willSortArrLimit = i+1; int tempPosition = willSortArrLimit; //其他元素后移 for(int j=arr.length-1; j> willSortArrLimit; j--){ arr[j] = arr[j-1]; } //寻找插入位置 for (int j= 0; j<=sortArrLimit; j++ ){ if (insertEle > arr[j]){ tempPosition = j; break;//找到位置之后要中断掉,有序数组是个逆序的数组 } } //执行插入动作 for (int j=willSortArrLimit; j>tempPosition; j--){ arr[j] = arr[j-1]; } arr[tempPosition] = insertEle; } System.out.println(Arrays.toString(arr));