排序算法之直接插入排序
来源:互联网 发布:云计算服务级别sla 编辑:程序博客网 时间:2024/06/05 11:58
最近准备面试,发现算法都快忘光了,抽空整理学习一下。
这一篇是关于直接插入排序的。
概念:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录+1的有序表。也即:先将序列的第一个记录看成是一个有序的子序列,然后从第二个记录开始,逐个地将后面的记录进行插入,直至整个序列都按照我们想要的样子进行了排序。
简单来说,对于整数数组,采取升序的方法,就是从第一个位置的数开始,首先去判断第二个位置的数是不是比它小,如果小,就表示它们需要交换位置,即要进行插入。前两个数字排好序后,进行第二次的循环,查看第三个数和前面两个数的大小关系,进行排序,得到一个长度为3的新的排好序的数组.....以此,逐个地将所有的数都进行了排序。
下面是关于整数数组排序的示例代码,分别为升序和降序,理解有困难的可以参照注释。
//my own 插入排序,此处,采用升序的排序方式,即1,2,3,4...这样的排序 public int[] sort(int[] num) { for(int i=1;i<num.length;i++) {//i为哨兵,代表了i之前的数字都是排好序的,此次的循环是为了将i位置的数字加入到排序中 if(num[i]<num[i-1]) {//表示需要进行插入 int temp=num[i];//把这个数字插入到正确的位置,即前一个数<=temp<后一个数 int j=i;//前面已经排好序的长度+1 while(j>0 && num[j-1]>temp) {//j>0很重要(而且必须放在前面),不然的话数组很可能会越界 num[j] = num[j-1];//即j位置的数字后移,而j+1位置的数已经被保存了。 j--; } //此时,num[j-1]<=temp<num[j] num[j]=temp; } } return num; }
//降序,即n,n-1,n-2... public int[] sortDescend(int[] num) { for(int i=1;i<num.length;i++) { if(num[i-1] < num[i]) {//即新加的数字比之前排好序的数组中最小的一个(即最后一个)要大,即需要进行插入 int temp=num[i]; int j=i; while(j>0 && num[j-1]<temp ) { num[j]=num[j-1]; j--; } num[j]=temp; } } return num; }
ok,直接插入排序就讲到这里。
继续复习其他算法去了。233
阅读全文
1 0
- 算法-插入排序之直接插入排序
- 排序算法-插入排序之直接插入
- 排序算法之直接插入排序算法
- 算法之直接插入排序
- 排序算法之直接插入
- 【算法】之直接插入排序
- 排序算法之直接插入排序
- java排序算法之直接插入排序
- 排序算法之直接插入排序
- 【排序算法】之直接插入排序
- 排序算法之直接插入排序(JAVA)
- Java算法排序之--直接插入排序
- 排序算法之直接插入排序
- 排序算法之直接插入排序
- 排序算法之直接插入排序
- 排序算法之直接插入排序(java)
- 排序算法之直接插入排序
- 排序算法总结之直接插入排序
- U
- 数据分析经验总结(非专业分析人员)
- Java NIO (一)
- BZOJ2005:能量采集(Mobius反演)
- RecyclerView中使用CheckBox出现勾选混乱的解决方案
- 排序算法之直接插入排序
- 23-Merge k Sorted Lists
- rocket mq Logappender示例——支持log4j等
- mybatis
- 【JEECG_3.7.1】Online树控件的使用
- Java基础(八) -------- UML图
- 运维必须要懂的MySQL主从复制原理
- Android activity相互跳转后台出现两个页面的坑
- 微信小程序使用Socket