共计 2463 个字符,预计需要花费 7 分钟才能阅读完成。
本文首发自「慕课网」,想理解更多 IT 干货内容,程序员圈内热闻,欢送关注!
作者 | 慕课网精英讲师 JdreamZhang
抉择排序(Select Sort),是计算机科学与技术畛域中较为简单的一种排序算法。假如咱们依照从小到大的程序进行排序。抉择排序会首先从待排序序列中抉择一个最小的元素放入排序好的序列中,而后顺次在从未排序好的序列中抉择最小的元素,直到最初须要抉择的待排序序列中只有一个元素,只须要将这个元素放在最初地位,就实现了整个排序过程。抉择排序的算法名称的由来就是因为在排序的过程中,依照排序规定(升序或者降序),顺次从待排序的序列中抉择出须要排列的元素。越小或者越大的元素会先抉择进去,直至实现整个排序。1. 抉择排序过程在介绍完抉择排序之后,咱们一起来看一下抉择排序的实现步骤具体是什么样的吧。
这里咱们假如待排序的序列为 [9,2,11,7,12,5],咱们依照从小到大的序列进行排序。1.1 算法步骤步骤 1:在待排序的序列中找到最小的元素,将最小元素与排序序列中首位元素替换地位;伪代码实现如下:// 待排序的序列记为 A,寻找最小元素的伪代码如下:
min = A[0]
for(int i=1;i<A.length;i++){
if(A[i] < min){
min = A[i]
}
}
代码块 1234567 步骤 2:从残余的未排序序列中,持续找出一个最小元素,将最小元素与排序好的序列的下一个地位进行替换;步骤 3:反复步骤 2 的工作,直至排序实现。其实,抉择排序次要是靠步骤 2 的反复执行,他会每次把最小的元素先抉择进去,而后放在排序好的序列的尾部。接下来,让咱们用下面的待排序数字序列 [9,2,11,7,12,5] 进行整个算法步骤的排序演示工作。1.2 算法演示依照 2.1 节的排序步骤,首先咱们会找出排序数字序列 [9,2,11,7,12,5] 中的最小元素 2,将 2 看作是排序好的元素,放在排序好的序列首位,如下:[9,2,11,7,12,5] –> [2,9,11,7,12,5] // 找出待排序序列中最小元素 2,放在首位,所以与 9 替换了地位
代码块 1 接着,步骤 2,步骤 3 的形容,咱们反复进行最小元素的抉择工作,整个过程如下:[2,9,11,7,12,5] –> [2,5,11,7,12,9] // 找出 [9,11,7,12,5] 中最小元素 5,而后与 9 替换地位
[2,5,11,7,12,9] –> [2,5,7,11,12,9] // 找出[11,7,12,9] 中最小元素 7,而后与 11 替换地位
[2,5,7,11,12,9] –> [2,5,7,9,12,11] // 找出[11,12,9] 中最小元素 9,而后与 11 替换地位
[2,5,7,9,12,11] –> [2,5,7,9,11,12] // 找出[12,11] 中最小元素 11,而后与 12 替换地位
[2,5,7,9,11,12] –> [2,5,7,9,11,12] // 最初一个元素 12,曾经在排序好的地位上,排序实现
代码块 12345
步骤 2 会顺次从待排序的序列中抉择一个最小的元素进去,而后将最小元素与排序好的序列的下一个地位的元素进行调换。反复整个 步骤 2,直至最初待排序序列只剩下一个元素,最初一个元素曾经排序好,阐明整个排序过程完结。Tips: 步骤 2 中每次执行抉择一个最小的元素时,都会在未排序序列的外部进行一次比拟筛选,记录下最小元素的地位,当遍历实现整个待排序序列之后,就能够确定最小元素的地位,将最小元素与已排序好序列的下一个元素进行地位调换,就实现了一个抉择最小元素的过程。从下面的示例能够看出,其实整个抉择排序的过程,每次都会去在未排序序列的外部进行一次抉择,找出最小的元素,将未排序序列中最小元素放在排序好的序列的下一地位。反复执行这个过程,就能够实现排序。2. Java 代码实现在阐明抉择排序的整个过程之后,接下来,咱们看看如何用 Java 代码实现抉择排序算法。import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
// 初始化须要排序的数组
int array[] = {9, 2, 11, 7, 12, 5};
// 顺次进行抉择排序,每次找出最小的元素,放入待排序的序列中
for(int i=0;i<array.length;i++){
// 记录最小元素 min 和最小元素的数组下标索引 minIndex
int min = array[i];
int minIndex = i;
// 在未排序的序列中找出最小的元素和对应数组中的地位
for(int j=i+1;j<array.length;j++){if(array[j] < min){min = array[j];
minIndex = j;
}
}
// 替换地位
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
// 打印出排序好的序列
System.out.println(Arrays.toString(array));
}
}
代码块 12345678910111213141516171819202122232425262728293031323334 运行后果如下:[2, 5, 7, 9, 11, 12]
代码块 1 代码中的第 7 行初始化一个须要排序的数组,前面依照从小到大的排序规定,实现了数组的排序。第 10 行是外层 for 循环,一直地反复抉择排序工作。第 17 行是内层循环,一直地实现每一次“抉择“,在未排序的序列中找出最小的元素和对应数组中的地位。第 24 至第 27 行实现了将未排序好的序列中的最小元素与须要排序的地位的元素进行替换的性能。第 31 行打印出排序好的数组。3. 小结本篇文章次要给大家介绍了抉择排序算法,须要大家相熟抉择排序的算法流程,晓得抉择排序算法的实现思路,能够本人用代码实现抉择排序算法。心愿大家能够比拟一下不同排序算法的实现思路,本人多总结思考。
欢送关注「慕课网」,发现更多 IT 圈优质内容,分享干货常识,帮忙你成为更好的程序员!