数据结构所有的排序算法(数据结构与算法之选择排序)
数据结构所有的排序算法(数据结构与算法之选择排序)① 第一轮从下标为 1 到下标为 n-1 的元素中选取最小值,若小于第一个数,则交换② 第二轮从下标为 2 到下标为 n-1 的元素中选取最小值,若小于第二个数,则交换③ 依次类推下去……3. 动图演示
选择排序(Selection Sort)1. 基本思想
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面,或者将最大值放在最后面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择,每一趟从前往后查找出无序区最小值,将最小值交换至无序区最前面的位置。
2. 实现逻辑
① 第一轮从下标为 1 到下标为 n-1 的元素中选取最小值,若小于第一个数,则交换
② 第二轮从下标为 2 到下标为 n-1 的元素中选取最小值,若小于第二个数,则交换
③ 依次类推下去……
3. 动图演示
public class SelectSort {
public static void main(String[] args) {
int[] arr = {101 34 119 1 -1 90 123};
System.out.println("排序后");
selectSort(arr);
for(int i:arr){
System.out.println(i);
}
}
//选择排序
public static void selectSort(int[] arr) {
//在推导的过程,我们发现了规律,因此,可以使用for来解决
//选择排序时间复杂度是 O(n^2)
for (int i = 0; i < arr.length - 1; i ) {
int minIndex = i;
int min = arr[i];
for (int j = i 1; j < arr.length; j ) {
if (min > arr[j]) { // 说明假定的最小值,并不是最小
min = arr[j]; // 重置min
minIndex = j; // 重置minIndex
}
}
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}
}