通俗讲排序之插入排序

本文详细介绍了插入排序中的直接插入排序及其代码实现,分析了其时间复杂度和稳定性。接着讲解了希尔排序的基本思想、代码实现及性能分析,表明希尔排序在大数据量时效率优于直接插入排序。
摘要由CSDN通过智能技术生成

插入排序

       插入排序(InsertionSort)的基本思想是:将待排序文件中的一个记录按照排序码的大小插入到一个有序序列的适当位置,使得插入后的序列仍然有序。用同样的方法可将所有记录全部插入到有序序列中,完成排序运算。插入排序主要包括两种方法:直接插人排序和希尔(Shell)排序。

直接插入排序(Straight Insertion Sort)

一、基本思想

       把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

二、代码实现

下面用两种方式实现,一个是for循环,另一个是while。

	private static int[] StraightInsertSort(int[] arr) {
//	思路:对于一个无序数组,从第一个元素开始,将数组分为左部分和右部分,初始是左边只有一个、右边length-1个。
//	即左边一个元素肯定是有序,右边len-1个无序,现在要每次从右部分拿出一个(拿的这个元素是右部分中左边数第一个))插入到左部分的有序序列中
//	右部分的这个元素就是待插入元素,它依次和左部分每个元素进行比较,从右向左的进行比较,这样比较的好处是,如果待插入元素刚好大于左部分的最右边元素
//	那这就不需要比较了,退出循环,待排序元素直接插入成功,如果待插入元素小于左部分的最右边元素,那么需要把他们俩交换位置,
//	循环不结束,然后下标减1,继续和左部分第二个元素,如果还小,继续调换位置,最后一直调换到arr[0]的位置,如果还小,和arr[0]
//	调换,循环结束。
		int temp = 0;
		for(int i=0;i<arr.length-1;i++)
//		外循环:这样想,一开始左部分一个元素,它肯定是有序的,右部分len-1个元素,把这len-1个元素插入
//		肯定得循环len-1次
			for(int j=i+1;j>0;j--) {
//          内循环:当i位置循环开始,说明i位置之前(包括i位置)是
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值