
学习视频分享:java视频教程
普通插入:从数组的第二个元素进行操作,当发现其前面的元素比他大时,执行交换操作。
static int[] insertSort(int[] array){
int len = array.length;
for (int begin = 1; begin 0 && array[cur] <p><strong>第一步优化:从数组的第二个元素进行操作,如果发现其前面的元素比他大,就将其前面的元素往后挪,直到cur指向的元素大于或者等于他前一个元素,此时cur指向的位置就是待插入元素应该插入的位置。</strong><br></p><pre class="brush:php;toolbar:false;"> static int[] insertSort2(int[] array){
int len = array.length;
for (int begin = 1; begin 0 && array[cur] <p><strong>第二步优化</strong><br></p><p><strong>第三种算法和第二种其实本质上是一样的,都是找待插入位置,挪动元素,只不过第三种算法通过二分查找减少了比较次数,即cmp函数的调用,还减少了swap函数的调用。更快的找到了当前元素应该插入的位置,然后再进行挪动,提高了效率。</strong></p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill10362" title="java-api-doc-generator"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20d79f23518.jpg" alt="java-api-doc-generator" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill10362" title="java-api-doc-generator" class="overflowclass">java-api-doc-generator</a>
<p class="overflowclass">分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。</p>
</div>
<a rel="nofollow" href="/xiazai/skill10362" title="java-api-doc-generator" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><pre class="brush:php;toolbar:false;">static int[] insertSort3(int[] array){
int len = array.length;
for (int begin = 1; begin insertIndex; i--){
array[i] = array[i-1];
}
array[insertIndex] = v;
}
return array;
}
static int search(int[] array, int index){
int begin = 0;
int end = index;
while(begin > 1;
if (array[index] <p><strong>需要注意的是:使用了二分搜索后,只是减少了比较次数,但插入排序的平均时间复杂度依然是O(n^2)</strong><br></p><p><strong>将其中的挪动操作分离出来的效果:</strong></p><pre class="brush:php;toolbar:false;"> package com.mj.sort.cmp;import com.mj.sort.Sort;public class InsertionSort3<t>> extends Sort<t> {
// protected void sort() {// for (int begin = 1; begin = insertIndex; i--) { }// for (int i = begin; i > insertIndex; i--) {// array[i] = array[i - 1];// }// array[insertIndex] = v;// }// }
@Override
protected void sort() {
for (int begin = 1; begin dest; i--) {
array[i] = array[i - 1];
}
array[dest] = v;
}
/**
* 利用二分搜索找到 index 位置元素的待插入位置
* 已经排好序数组的区间范围是 [0, index)
* @param index
* @return
*/
private int search(int index) {
int begin = 0;
int end = index;
while (begin > 1;
if (cmp(array[index], array[mid]) <p>相关推荐:<a href="https://www.php.cn/java/guide/" target="_blank">java入门教程</a></p></t></t>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










