您的位置:首页 > 大数据 > 人工智能

算法笔记:(一)插入排序:直接插入排序(Straight Insertion Sort)

2017-04-18 00:38 302 查看
小记:人最痛苦的事情,就是我原本可以...上学的时候对编程不感兴趣,没有学好专业知识,刚刚毕业工作了一段时间后,同学推荐后差点进入腾讯,我连最基本的Main函数参数都不明白。在济南干了三年,成了不大不小的项目经理,后来朋友说济南没有前途,我也头脑发热的去北漂,第一个面试是华为,上级题简单的二进制反转,但是面试不好,简历里面写的熟练掌握面向对象,面试官问我,怎么用C来进行面向对象设计,我一时没有想起来,最后没有通过最后的面试。后来我想Struct等等都可以表示对象啊,函数用指针。后来的工作也是不大不小的公司,虽然工作表现不错,但心里总是有那么一点点遗憾。如果上学的时候,学的扎实一些,如果毕业之后补习一下,如果面试多准备。人啊,没有那么多如果,虽然我可能进入后被35退休,累的吐血。上学的时候,基本上都是马马虎虎的过来了。现在三十而立,只是立了家,毕业之后在上海济南北京晃荡了七年后,回到了自己的家乡,在一个四五线的城市,干着软件开发,下班后比较闲,没事的时候就特别心慌,所以打算把大学时候没有学好的知识再好好的弄明白。

言归正传,直接插入排序的基本思想:

将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,比较前面元素之间大小,交换元素保证子序列有序。子序列有序后,再加入后面的元素,成为一个新的序列,然后遍历这个新的序列,调整加入的元素在合适的位置,使这个新的序列有序。直至整个序列有序为止。排序后相等的元素前后顺序不会发生变化,所以这种排序方法是稳定。 时间复杂度:O(n2)。
假设有一个数组 int[] list={15,8,45,6,8,12,7,9,2},对它进行排序,每次加入新的元素,用“()”括起来表示。排序的顺序如下图:



以前一直从事.NET开发,最近可能接受Java的项目,所以这次用java代码学习,所以一些理解不到位的地方,请多不吝指教。

//直接插入排序
public class Straight_Insertion_Sort_Main {

/*将一个记录插入到已排序好的有序表中,
* 从而得到一个新,记录数增1的有序表。
* 即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,
* 直至整个序列有序为止。*/
public static int recorde=0;//显示交换次数,和算法无关
public static int forIndex=0;//循环次数统计,和算法无关无效值
public static    void print(int[] list,int change)
{
int len=list.length;
System.out.print("排序次数="+recorde+"  ");
recorde++;
for(int index=0;index<len;index++)
{
if(list[index]==change)
{
System.out.print("("+list[index]+") ");
}
else
{
System.out.print(list[index]+" ");
}
if(index==len-1)
{
System.out.println("");
}
}
}

public static void Sort(int[] list)
{
int len=list.length;
print(list,list[0]);
forIndex++;
for(int index=1;index<len;index++)
{
if(list[index]<list[index-1])
{
int last=list[index];
list[index]=list[index-1];
list[index-1]=last;//将最大的数放在最后
print(list,last);
int reindex=index-1;
while(reindex>0)//同时向前遍历,保证数组的有序
{
forIndex++;
if(list[reindex-1]>last)
{
list[reindex]=list[reindex-1];
list[reindex-1]=last;

print(list,last);
}
else//
{
break;
}
reindex--;

}
}
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] list={15,8,45,6,8,12,7,9,2};
Sort(list);
}

}


参考链接地址:http://blog.csdn.net/hguisu/article/details/7776068
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: