目录
一.选择排序介绍:
选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
二.选择排序的基本步骤:
-
初始化:将一个记录的关键字存放到最小值记录位置。
-
从第一个记录开始,到倒数第二个记录止,逐个与最小值记录的关键字比较。
-
如果发现小于最小值记录的关键字,则将该关键字记录放到最小值记录的位置。
-
重复第2步和第3步,直到遍历结束。
-
此时,最小值记录就到了序列的起始位置,将最小值记录移到序列的起始位置。
-
然后,对剩下的未排序记录重复上述过程,直到所有记录排序完成。
三.选择排序的java代码实现:
1.最小的元素放在最左端(升序)
public class SelectionSort {
public static void main(String[] args) {
int[] arr={7,4,5,9,8,2,1};
int n=arr.length;
int temp;
// 外循环:从第一个元素到倒数第二个元素
for (int i = 0; i < n - 1; i++) {
//假设当前索引是最小的;
int min_idx=i;
for (int j =i+1; j < n; j++) {
if(arr[j]<arr[min_idx]){
//如果找到了一个更小的元素,更新最小元素的索引;
min_idx=j;
}
}//将最小的元素交换到它应该在的位置;
temp=arr[i];
arr[i]=arr[min_idx];
arr[min_idx]=temp;
}
for (int i : arr) {
System.out.print(i+" ");
}
}
}
1.最大的元素放在最右端(升序)
public class SelectionSort {
public static void main(String[] args) {
int[] arr={7,4,5,9,8,2,1};
int n=arr.length;
int temp;
// 外循环:从最后一个元素到第二个元素
for (int i = n-1; i > 0; i--) {
//假设当前索引是最大的;
int max_idx=i;
for (int j =i-1; j >= 0; j--) {
if(arr[j]>arr[max_idx]){
//如果找到了一个更大的元素,更新最大元素的索引;
max_idx=j;
}
}//将最大的元素交换到它应该在的位置;
temp=arr[i];
arr[i]=arr[max_idx];
arr[max_idx]=temp;
}
for (int i : arr) {
System.out.print(i+" ");
}
}
}
总结
选择排序的时间复杂度为O(n^2),因为它需要遍历数组来查找每个位置上的最小(或最大)元素。尽管它的效率不是特别高,但是选择排序算法因其简单性而在某些情况下仍然有用。特别是当内存很宝贵时,选择排序可以避免使用额外的空间,因为它不需要像归并排序那样使用额外的数组。