算法第四版--直接插入排序

系列文章目录

一、直接插入排序InsertSort

基本思想:每次将一个待排序的元素插入到前面已经排好的子序列当中,直至全部元素插入完成

1.分析

数组共分为3部分:有序序列,待排序元素,无序序列
首先,初始状态时,有序序列为a[0],整个过程会将a[1······n-1]
依次插入到前面已排好序的子序列当中
(a[n-1]为数组的最后一个元素,即a.length-1)

过程中为在这里插入图片描述

2.代码

代码如下(示例):

import edu.princeton.cs.algs4.StdOut;      //算法第四版中的自己的库
//直接插入排序
public class Insertion {
	public static void sort(Comparable[] a) 
	{	
		for(int i=1; i<a.length; i++)     //a[1]开始,a[a.length-1]结束
		{
			for(int j=i-1; j>=0&& less(a[j+1],a[j]);j--)	
				exch(a,j+1,j);                  
		}	
	}
	
	//v < w?  比较大小
	private static boolean less(Comparable v, Comparable w) {
		return v.compareTo(w) < 0;          
	}
	//交换 a[i] 和a[j]
	private static void exch(Comparable[] a , int i,int j) {
		Comparable t=a[i];
		a[i] = a[j];
		a[j] = t;
	}		

摘自书中的两句话:
1、在 Java中,元素通常都是对象,对主键的抽象描述则是通过一种内置的机制(请见2.1.1.4节中的Comparable接 口)来完成的。
2、大多数情况下,我们的排序代码只会通过两个方法操作数据:less( )方法对元素进行比较,exch()方法将元素交换位置。exch ()方法的实现很简单,通 过Comparable接口实现less( ) 方法也不困难。将数据操作限制在这两个方法中使得代码的可读性和可移植性更好,更容易验证代码的正确性、分析性能以及排序算法之间的比较。


总结

提示:额外了解一下Comparable接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值