选择排序原理

选择排序是一种简单排序算法。这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素。当然,一开始的时候,我们认为都是未经排序的。

选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置。主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置。以一个元素个数为N的整形数组arr为例:

  • 第一趟 以第一个元素arr[0]为基准,准备好一个中间变量temp用来记录该趟最小元素的位置,一开始,temp=0,比较arr[0]和arr[temp]的大小,若后者小于前者,则temp赋新值0,当前较小的值和第三个元素比较,将比较结果较小的索引赋给temp,以此类推,直至最后一个元素,这样第一趟下来,我们得到该数组最小元素的下标,然后交换第一个元素和下标为temp的元素值。
  • 第二趟 第一趟已经将最小的元素放在第一个位置上了,因此以第二个元素开始,temp重新赋值为1,开始和它之后的元素比较,跟第一趟一样,最终得到第二小的元素放置在数组的第二个位置上。
  • 第N趟 得到最大的元素放在数组末尾。 
    至此,选择排序算法结束,选择排序算法复杂度O(N),比较次数N-1、N-2、…、1,交换次数N。

选择排序工作流程

以下面的一个原始数组作为一个例子: 

java选择排序的代码 java基础 选择排序实例_编程语言

第一趟:以第一个元素14为基准,我们找到最小的元素10: 

java选择排序的代码 java基础 选择排序实例_快速排序_02

我们交换14和10,这样得到了最小的值放到数组第一个位置中: 

java选择排序的代码 java基础 选择排序实例_编程语言_03

第二趟:以第二个元素33为基准,往后找最小的数: 

java选择排序的代码 java基础 选择排序实例_编程语言_04

找到第二小的数14,交换第二个元素和14: 

java选择排序的代码 java基础 选择排序实例_编程语言_05

 

java选择排序的代码 java基础 选择排序实例_编程语言_06

完成第二趟排序,至此第二小的元素已经放置在数组的第二个位置中。

后面的排序过程以此类推,以下是整个排序过程: 

java选择排序的代码 java基础 选择排序实例_编程语言_07

最后展示完整的选择排序代码:

java选择排序的代码 java基础 选择排序实例_快速排序_08


java选择排序的代码 java基础 选择排序实例_编程语言_09

java选择排序的代码 java基础 选择排序实例_排序算法_10