算法可视化系列——排序算法——插入排序

本文是算法可视化的系列文章,主要讲解插入排序的基本思想、算法描述及Java实现。通过实例展示了插入排序的过程,包括动态演示排序状态,并提供程序源代码供读者参考。后续将继续分析其他排序算法的动态演示。
摘要由CSDN通过智能技术生成

排序算法可视化系列——篇一“插入排序”

     排序算法是我们经常会用到的基础算法,虽然是基础但是却很重要。而且自己也为了自己学习算法和巩固,所以我选择从基本的排序算法开始实现。

 

插入排序

      基本思想分析:

假设我们现在书柜上有一排高低不同的书,我们需要按照从最矮的到最高的顺序从左到右排列这些书本,那么我们进行的就是对这些书本的排序。现在我们使用插入排序来进行排序,我们从左边开始,比较左边第一本书和相邻的第二本书的高度,如果第一本书高,那么我们就将第一本书放到第二本书后面,这是第二本书就成了第一本书,且我们知道现在前两本书是有序的了;如果第二本书高,那么前两本本来就是有序的,不需要我们排序,我们接着比较第二本书与第三本书,同样,如果第三本书比第二本书低,那么我们将第二本书移动到第三本书的位置,在比较与第一本书的高低,如果比第一本书高,那么就将它放在第二本书的位置,否则将第一本书再放到第二本书的位置,然后再将它放到第一个位置。以此类推,就可以将整个书架的书排成有序的。

 

算法的描述:

    InsertSortAlgorithm

    for(循环从第二个比较元素到最后一个元素){

            while(循环条件判断i是否满足小于i - 1和是否越数组界){

                   移动比较过的元素

                   改变索引

            }

            经过循环,说明找到了合适位置,则插入

     }

 

从上面的算法描述可以看出,外层循环会执行n-1次,内层循环执行的次数最坏执行i次,所以我们知道整个算法最坏循环会执行1 + 2 + ... + (n - 1) = n*(n-1)/2,则我们知道算法的时间复杂度为O(n^2)

 

算法的Java简单语言实现:

/**
* Java语言对插入排序的基本实现
* 在本实现算法中,采用对基本的整数数组进行排序
* 排序的顺序是从大到小
*
*/

public void insertSort(int[] a){
	/**
	* 如果只有一个元素,则不需要排序
	*/
	if(a.length > 1){
		/**
		* 依次取出待插入的元素
		*/
		for(int i = 1; i < a.length; i++){
			/**
			* 记录待插入元素
			*/
			int temp_data = a[i];

			/**
			*初始移动索引为当前元素的前一个
			*/
			int index = i - 1;
			
			/**
			*移动前面的元素,直到找到插入位置
			*/
			while(temp_data < a[index] && index >= 0){
				a[index + 1] = a[index];
				index--; 
			}
			/**
			*将元素插入
			*/
			a[index] = temp_data;
		}
	}
}

 

上面是对于插入排序的一个基本实现,用来体会插入排序的思想,下面是对插入排序的动态演示截图:

 

一. 排序中......



 二. 排序中......



 三. 排序完成



 上面就是插入排序的动态视图,其中界面上的其它排序,会依次再接着的几篇博客中继续进行分析和动态演示。。。。。。敬请期待!嘿嘿!

 

程序源代码附在下面,有需要的可下载:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值