奔走在算法的大路上(一)排序之插入排序
插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
其原理我感觉用一张图说明时最好的了
源码
package Sort;
/*** <p>* Description: 插入排序* </p>* @author zhangjunshuai* @version 1.0* Create Date: 2015年4月6日 上午11:12:37* Project Name: ArithMetic** <pre>* Modification History: * Date Author Version Description * ----------------------------------------------------------------------------------------------------------- * LastChange: $Date:2015年4月6日 $ $Author: zhangjunshuai$ $Rev:1.0 $ * </pre>**/
public class Insertion {public static void sort(Comparable[] a){int N = a.length;for(int i=1;i<N;i++){for(int j = i-1;j>=0&&less(a[j],a[j+1]);j--){exch(a,j,j+1);}show(a);}}/*** <p>* 是否小于* </p>* @author zhangjunshuai* @date 2015年4月3日 下午4:14:52* @param v* @param w* @return*/private static boolean less(Comparable v,Comparable w){return v.compareTo(w)<0;}/*** <p>* 交换函数* </p>* @author zhangjunshuai* @date 2015年4月3日 下午4:14:32* @param a* @param i* @param j*/private static void exch(Comparable[] a,int i ,int j){Comparable t = a[i];a[i] = a[j];a[j] = t;}/*** <p>* 打印输出* </p>* @author zhangjunshuai* @date 2015年4月3日 下午4:19:03* @param a*/private static void show(Comparable[] a){for(int i = 0; i < a.length; i++){System.out.print(a[i] + " ");}System.out.println();}public static void main(String[] args) {Integer[] a = {1,3,4,5,6,7,23,13,45,25,56,71};sort(a);/*Character[] b = {'a','b','d','w','e','f','g','y','u','t','q','s','d','l','j','g','g','z'};sort(b);*/}
}
奔走在算法的大路上(一)排序之插入排序相关推荐
- 奔走在算法的大路上(一)排序之希尔排序
希尔排序是插入排序的一种更高效的改进版本.它的作法不是每次一个元素挨一个元素的比较.而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置:然后增量缩小:最后增量为 1 ,这样记录移动次 ...
- 奔走在算法的大路上(一)排序之归并排序
归并排序(Merge sort)是创建在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 归并操作 归并操作(merge),也叫归并算法 ...
- 奔走在算法的大路上(一)排序之选择排序
首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置.如此往复,直到 ...
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
- java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...
- Python排序算法(一)冒泡排序、选择排序、插入排序
今天总结一下Python中的排序算法.这篇文章有的排序算法是:冒泡排序.选择排序.插入排序. 冒泡排序 先看一下代码. ''' 冒泡排序 '''def bubble_sort(aList):n = l ...
- 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)
排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...
- 基础排序算法(冒泡排序,选择排序,插入排序)
最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会 ...
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...
最新文章
- Json字符串转二维数组
- django session, 分页,数据库学习
- 【Linux】35. python脚本重命名各子目录下的图片
- micropython socket_Micropython之HTTP-GET方法2
- 软件设计思维:软件应该可以增大可以减小
- java多线程(一)-Thread类和Runnable接口
- verilog中的综合与不可综合
- Taro+react开发(29)引入固定地址的方式
- linux---基础02
- Debian11镜像更新为阿里巴巴开源镜像站镜像,切换root用户,解决用户名不在sudoers文件中此事将被报告,Debian11 文件夹对话框、火狐浏览器、命令终端等没有最大化和最小化
- SubRenamer – 字幕批量重命名,自动匹配视频文件与字幕文件[Windows]
- powershell一行代码批量修改文件名(附命令详解)
- helm安装_安装 helm 包管理工具
- oracle rac 距离限制,Oracle Extended Distance Clusters (Oracle 扩展距离集群 - 异地RAC)
- 护士如何预防职业病:下肢静脉曲张-健康小常识
- 帆软控件焦点事件设置可用性
- 深入浅出23种设计模式(最全面)
- SoapUI中文乱码
- OpenV2X开源社区亮相全球边缘计算大会
- 微信小程序如何跳转视频号直播间