《算法导论的Java实现》 1_1.1 插入排序

第一章 算法概念
1.1 算法

插入排序的伪代码:
INSERTION-SORT(A)
1  for j ← 2 to length[A]
2       do key ← A[j]
3          ▹ Insert A[j] into the sorted sequence A[1 ‥ j - 1].
4          i ← j - 1
5          while i > 0 and A[i] > key
6              do A[i + 1] ← A[i]
7                 i ← i - 1
8          A[i + 1] ← key


Java实现:

其中insertionSort是实现插入排序伪代码的函数,main是测试用的。
输出:
before InsertionSort:
31 41 59 26 41 58
result:
26 31 41 41 58 59

coding后感
1,伪代码的数组下标是从1到数组长度的,而Java的数组下标是从0到数组长度减1的。改写虽然没有难度,但是请看伪代码的第5行“while i > 0”,i从大到小,等于0为止,多么的优雅?!,而我的Java代码,不得不改成“while (i > -1”,感觉难看得多。而且,最外层循环“for (int j = 1”,也容易让Java新手产生误解,以为是从被排序数组的第一项开始循环的。
2,伪代码如果仅仅用Java实现一下而已的话,将是一件很容易的事儿,可能这本《算法导论》的Java实现,也有别的人在做吧。我想做的事是把Java的特性也融合进伪代码中。比方说这个插入排序,在伪代码中排序的是一个数组,而数组的元素是可以进行值判断的(大于小于等于),在Java中已经定义过的java.util.Comparator接口,正是给排序用的。我的函数的参数里有这个接口,而实现这个接口交给外部的调用函数,这个做法使这个函数更通用,可以直接用在各种场合。当然这个插入排序本身是没有任何实用价值的。

1.2  算法分析
这一小节没有代码,就不另起段落了。我看了插入排序的算法分析后的感想是,和同样是Θ(n^2)的排序相比,插入排序的比较次数是一样的(平均情况和最坏情况都是),但是它赋值的次数,却可能是最多的。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值