前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >插入排序之直接插入排序

插入排序之直接插入排序

作者头像
suveng
发布2019-09-18 14:31:59
3880
发布2019-09-18 14:31:59
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_37933685/article/details/84792290

个人博客:https://suveng.github.io/blog/​​​​​​​ title: 插入排序之直接插入排序 date: 2018-12-01 19:00:00 +0800 update: 2018-12-01 19:00:00 +0800 author: suveng tags:

  • 算法 preview: 插入排序之直接插入排序

文章目录

  • 插入排序之直接插入排序
    • 原理
    • 时间复杂度
    • 空间复杂度
    • 稳定性
    • 算法实现
      • Java

插入排序之直接插入排序

原理

  1. 列表第一个元素和前面元素比较,如果小于前面元素(其实不存在),则交换位置。(这步其实可以没有)
  2. 列表第二个元素和前面元素(第一个元素)比较,如果小于前面元素,则交换位置。
  3. 列表第三个元素和前面元素(第二个元素)比较,如果小于前面元素,则交换位置。如果和前面元素交换了位置,现在在第二个位置上,则接着继续和前面元素比较(第一个元素),如果小于前面元素,接着再次交换位置,然后再次重复比较过程…
  4. 继续重复以上过程,直到最后一个元素完成比较

时间复杂度

最坏时间复杂度

最优时间复杂度

平均时间复杂度

O(n^2)

O(n)

O(n^2)

空间复杂度

O(1)

稳定性

稳定

**稳定性定义:**排序前后两个相等的数相对位置不变,则算法稳定。

算法实现

Java

代码语言:javascript
复制
class InsertionSort {
	public static void main(String[] args) {
		System.out.println("hello,直接插入排序");
		InsertSort is=new InsertSort();
		int[] des=is.directInsertSort(new int[]{72,78,42,60,84,74,60,79,72,52});
		for(int i=0;i<des.length;i++){
			System.out.println(" "+des[i]);
		}
		System.out.println();
	}
	
	public int[] directInsertSort(int[] source){
		int n=source.length;
		//可以直接从第二个元素开始
		for(int i=1;i<n;i++){
			for(int j=i;j>0;j--){
				if(source[j]<source[j-1]){
					//异或法 交换变量,减少临时变量
					source[j]=source[j]^source[j-1];
					source[j-1]=source[j]^source[j-1];
					source[j]=source[j]^source[j-1];
				}
			}
		}
		return source;
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年12月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 插入排序之直接插入排序
    • 原理
      • 时间复杂度
        • 空间复杂度
          • 稳定性
            • 算法实现
              • Java
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档