由于马上要参加一个笔试,又拿出了满是灰尘的数据结构课本,想把基本的数据类型和算法给看一看,由于找工作是java方面,所以有意把排序的算法用java写一下,水平很是一般,希望自己能够一步一个脚印,踏实走下去,如果能给大家一些启发就更好了。 代码全部测试过,如有瑕疵,请批评指正。
首先介绍引自百度---插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
插入排序的基本操作是:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。
稳定的定义:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
我的理解是:
1.把需要排序的数分成两份,第一份是有序的,第二份无序。
2.最开始可以把第一个数看成是有序,每次从第二份无序数中按顺序取一个数。
3.把取得数跟有序数中的最后一个比较,如果前者小于后者,找合适位置插入。
4.循环步骤三,则排序结束。
java实现 (数据使用严蔚敏版 数据结构)
public void InsertSort(int []s){
int j;
for (int i = 1; i <s.length; i++) { //从i=1开始,即认为数组第一个数为有序组
if (s[i]<s[i-1]) {
int temp=s[i];
//从有序数组中从后往前开始匹配ÿ