`
wojiaolongyinong
  • 浏览: 74072 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

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

阅读更多

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

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

 

插入排序

      基本思想分析:

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

 

算法的描述:

    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;
		}
	}
}

 

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

 

一. 排序中......



 二. 排序中......



 三. 排序完成



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

 

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

 

  • 大小: 35 KB
  • 大小: 32.5 KB
  • 大小: 33.2 KB
分享到:
评论
5 楼 wojiaolongyinong 2013-05-21  
消失的气泡 写道
博主,您在这篇博客中贴的代码有几个问题,看下边的代码
while(temp_data < a[index] && index >= 0){  
                a[index + 1] = a[index];  
                index--;   
            }  
            /** 
            *将元素插入 
            */  
            a[index] = temp_data; 

1.如果判断到数组的开始头部门,index是可以等于-1的,所以while判断中,应该先判断index是否大于0,不然如上边的代码一样,数组肯定是越界。
2。最终将元素插入的代码应该是a[index+1] = temp_data,当把元素后移之后,此时的index就是插入的位置,但是下边还有个index--,所以这边肯定是index+1

嗯嗯,是我的大意,对的,应该先判断index,下面那里确实少加了1,是我的疏忽,多谢指教。。。。嘿嘿嘿
4 楼 消失的气泡 2013-05-21  
博主,您在这篇博客中贴的代码有几个问题,看下边的代码
while(temp_data < a[index] && index >= 0){  
                a[index + 1] = a[index];  
                index--;   
            }  
            /** 
            *将元素插入 
            */  
            a[index] = temp_data; 

1.如果判断到数组的开始头部门,index是可以等于-1的,所以while判断中,应该先判断index是否大于0,不然如上边的代码一样,数组肯定是越界。
2。最终将元素插入的代码应该是a[index+1] = temp_data,当把元素后移之后,此时的index就是插入的位置,但是下边还有个index--,所以这边肯定是index+1
3 楼 mnpqxz 2013-05-20  
博主已经很厉害了,膜拜博主啊
2 楼 wojiaolongyinong 2013-05-20  
mnpqxz 写道
只有这个能运行,其它的程序都有DrawLine这个类,

嗯嗯,因为其它有的需要画那条绿线,所以有那个类,是我失误。。。。
1 楼 mnpqxz 2013-05-20  
只有这个能运行,其它的程序都有DrawLine这个类,

相关推荐

    算法可视化系列——排序算法——希尔排序

    希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的间隔进行分组,然后对每组进行插入排序,随着间隔逐渐缩小,最后进行一次全排列,...

    C#简单的排序算法可视化程序

    在本文中,我们将深入探讨C#编程语言中的几种基本排序算法——冒泡排序、插入排序以及快速排序,并结合“C#简单的排序算法可视化程序”这一主题,了解如何将这些算法进行可视化展示。在这个Windows Forms应用程序中...

    课程设计算法可视化实现

    《课程设计:算法可视化实现——探索数据结构的魅力》 在当今的计算机科学领域,数据结构与算法是不可或缺的基础,它们是编程的灵魂,是解决问题的关键。本课程设计的主题为“算法可视化实现”,旨在通过实践帮助...

    计算机算法知识领域的深奥理论可视化教学研究——以数据结构与算法课程为例.pdf

    它还能够展示算法的不同过程,例如搜索算法中的折半查找和分块查找,排序算法中的插入排序等。 在实现可视化教学的过程中,研究者们发现运用视觉表征手段,如计算机图形学原理和方法,能够促进知识的传播和创新。...

    算法可视化演示软件开发毕业设计.doc

    此外,论文还介绍了两种基础排序算法——冒泡排序和插入排序。冒泡排序是一种简单的排序方法,通过重复遍历待排序序列,比较相邻元素并交换,使得每一轮遍历后最大(或最小)的元素“浮”到序列末尾。插入排序则是...

    java线程应用——排序过程动态显示

    本主题聚焦于“java线程应用——排序过程动态显示”,通过源码和示例程序来阐述如何利用线程来实时展示排序算法的动态过程。 首先,排序过程动态显示意味着我们将使用线程来逐个步骤地执行排序算法,同时更新用户...

    可视化排序过程

    1. 该程序为一个可以展示不同排序算法的排序过程动画,... 一共有三种排序方法——直接插入排序、直接选择排序和冒泡排序快速排序,; 3. 排序元素输入为手动输入; 4. 有进度条显示排序的进度; 5. IDE:Eclipse

    排序算法效率分析-动态显示排序过程

    这种可视化教学方法对于初学者尤其有益,能帮助他们快速掌握各种排序算法的精髓。 三、关键算法介绍 1. 冒泡排序:通过重复遍历待排序的元素列表,依次比较并交换相邻元素,直到没有更多的元素需要交换,使得整个...

    c#实现各个排序可视化.rar

    本项目"**c#实现各个排序可视化**"显然是一个教学资源,旨在帮助学生理解并实践计算机科学中的核心概念——排序算法。通过可视化的方式,学习者可以更直观地看到排序过程,加深对各种算法的理解。 排序是计算机科学...

    (严蔚敏、吴伟民)数据结构配套可视化算法演示系统

    《严蔚敏、吴伟民》数据结构配套可视化算法演示系统是针对计算机科学中的核心课程——数据结构设计的一款辅助教学工具。该系统以其强大的可视化功能,帮助学生和教师深入理解各种数据结构及其操作,使抽象的算法变得...

    【案例】tkinter动态演示——插入排序

    这个演示不仅能够帮助我们理解插入排序的工作原理,还可以通过可视化的方式增强学习体验。我们将学习如何创建一个交互式的图形用户界面(GUI),以及如何处理不同大小的数字在排序过程中的呈现。 首先,我们需要...

    c#各种排序算法动态图形演示-数据结构经典算法动态演示

    "数据结构经典算法动态演示"这部分内容可能是通过图形化方式帮助学习者直观地理解每个排序算法的过程,这种可视化教学方法能帮助开发者更好地把握算法逻辑,加深对算法运行效率的理解,对于初学者来说尤其有益。...

    排序算法matlab仿真代码

    本文将深入探讨三种常见的排序算法——插入排序、希尔排序和快速排序,并介绍如何在MATLAB环境下进行仿真及统计它们的运算量。MATLAB是一种强大的数值计算和可视化工具,适合用于算法的开发和性能评估。 首先,我们...

    大数据结构课程设计_排序算法比较【完整版】.pdf

    《大数据结构课程设计_排序算法比较【完整版】》这篇文档是关于大数据处理中的核心算法——排序算法的详细比较和实现。文档主要分为七个部分,包括需求分析、程序功能、运行平台、数据结构、算法思想及时间复杂度、...

    VisualSorting:JavaScript 排序算法可视化

    **排序算法可视化——VisualSorting基于JavaScript的实现** VisualSorting是一个基于JavaScript的项目,它通过动态动画的方式展示了多种经典的排序算法,使用户能够直观地理解排序过程。该项目的主要目的是帮助学习...

    Sorting-Algorithm-Visualizer:在Michael Duffy的教程的帮助下制作的排序算法可视化器; 包括我自己的其他算法的实现

    《排序算法可视化器——深入解析C#实现》 在计算机科学领域,排序算法是不可或缺的基础,它们用于将一组数据按照特定顺序排列。本项目“Sorting-Algorithm-Visualizer”是Michael Duffy开发的一个教程,旨在帮助...

    sortvis:可视化排序算法

    **排序算法可视化——深入理解与探索** 排序算法是计算机科学中的基本概念,它涉及将一组数据按照特定顺序排列。在编程领域,理解并熟练运用排序算法对于提升程序效率至关重要。"Sortvis" 是一个用于可视化排序算法...

    alvis:算法可视化器

    **算法可视化器——爱维斯(Alvis)** 爱维斯是一个基于JavaScript的算法可视化工具,它旨在帮助用户直观地理解和学习各种计算机算法。通过在网页浏览器中打开`algovis.html`,用户可以交互地观察算法的执行过程,...

    算法分析实验报告 模板

    这次测试的算法有直接插入排序、快速排序、归并排序,以及两种专门针对大数据排序的算法——基数排序和计数排序。同样,需要记录每种算法的运行时间并绘制图表。 **实验环境** 实验环境对于算法性能的测量至关重要...

Global site tag (gtag.js) - Google Analytics