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

算法可视化系列——排序算法——选择排序

阅读更多

排序算法可视化系列——篇二“选择排序”

 

选择排序

 

基本思想分析:

同样是我们在书架上将书的顺序从大到小排列好的事情,今天我们采用不同于上

次的插入排序,我们这次使用选择排序首先我们先分析选择排序的思想,在书架上

有一排高低错落的书,我们需要把这些书排成从低到高的顺序,我们从第一本书的位

置开始,找出这一排书中最矮的,放到第一个位置,将第一本书再放到被取出的那本

书的位置,然后不管第一本书,我们再从第二本书开始,找出剩余书中最矮的,然后

再和第二本书交换位置,以此类推,直到所有的书都有序了,OK!我们的书架整齐了。

这就是选择排序的基本思想。

 

     算法描述:

     //假设是对一个n维整型数组进行排序

     for(进行循环,直到前n-1个元素被排有序){

          for(进行循环,寻找从此刻为止到数组最后一位最小的数){

                   进行大小判断,记录到此刻为止最小的数值及位置索引

          }

          将i位置元素与从i~n最小的元素进行交换

     }

 

    从上面的算法描述可以看出,外层循环会执行n-1次,内层循环会执行n-i次,并且每

次在最坏情况下都会进行2次赋值,那么我们知道总共执行次数

是n + (n - 1) + ... + 2 + 1 + 2 * n = (n^2 + 5n)/2,则我们知道时间复杂度为O(n^2)

 

算法Java语言的简单实现:

 

 

/**
* 选择排序的Java简单实现
* 排序目标是整形数组
*/

public void selectSort(int[] a){
	/**
	* 外部循环,只需要到a.length - 1,因为当
	* 前n-1个元素排好序时,最后一个必然有序
	*/
	for(int i = 0; i < a.length - 1; i++){
		/**
		* 用于记录当前位置元素,以及索引
		* 用于存储从i~n最小元素的值与索引
		*/
		int temp_data = a[i];
		int index = i;

		/** 
		* 循环找出从i~n的的最小元素及索引
		*/
		for(int j = i; j < a.length; j++){
			if(a[j] < temp_data){
				temp_data = a[j];
				index = j;
			}
		}

		/**
		* 元素进行交换
		*/
		a[j] = a[i];
		a[i] = temp_data;
	}
}

 

上面是对选择排序的一个基本实现,主要是用来体会选择排序的基本思想,下面是关于选择排序的动态演示,具体如下:

 

一、 排序中......



 二、 排序中和后面最矮的交换......



 三、排好序......



 程序源代码附加在下(只是其中实现选择排序的一部分,其余在上一个已经给出):

 

  • 大小: 33.7 KB
  • 大小: 33.2 KB
  • 大小: 32.2 KB
分享到:
评论
1 楼 消失的气泡 2013-05-23  
a[j] = a[i];  
a[i] = temp_data;

博主,这个应该是
a[index] = a[i];  
a[i] = temp_data;

,这里已经出循环了,那个j应该属于未定义的变量~
就算j在前边定义了,循环结束后,j跟index也不一定是相等的

相关推荐

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

    在本系列的“算法可视化”中,我们将深入探讨插入排序的实现及其在实际编程中的应用。 **一、插入排序的基本概念** 插入排序是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入...

    算法可视化系列——排序算法——快速排序

    在这个系列中,我们将通过算法可视化来深入理解快速排序的工作原理。 快速排序的步骤如下: 1. **选择基准元素(Pivot Selection)**:首先,我们需要从数组中选取一个元素作为基准。这个元素将用来划分数组,使得...

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

    希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的间隔进行分组,然后对每组...对于学习和理解排序算法,希尔排序是不可或缺的一部分。

    算法可视化系列——排序算法——冒泡排序

    冒泡排序是一种基础且经典的排序算法,其工作原理是通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成...

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

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

    课程设计算法可视化实现

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

    可视化展示快速排序算法实现效果

    在这个“可视化展示快速排序算法实现效果”的项目中,开发人员使用了Qt库来创建一个交互式的图形用户界面,以便用户能够直观地看到快速排序的过程。Qt是一个跨平台的C++图形用户界面应用程序框架,它提供了丰富的UI...

    java语言排序——选择排序法和冒泡排序法(排序时间的测试盒比较)

    图片文件`1409193.png`, `1409190.png`, 和 `1409197.png`可能是用于辅助理解这些排序算法的可视化表示,例如展示排序过程中的元素移动或者时间复杂度对比图。 在实际应用中,我们通常会使用更高效的排序算法,如...

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

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

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

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

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

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

    可视化排序过程

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

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

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

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

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

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

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

    IOS版各种排序算法

    首先,我们来了解最基本的排序算法——冒泡排序。冒泡排序是一种简单直观的排序方法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要...

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

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

Global site tag (gtag.js) - Google Analytics