选择排序是一种简单直观的排序算法。它的基本思想是每次从待排序的数列中选择最小(或最大)的元素,将其放到已排序数列的末尾(或开头),然后再从剩余的未排序元素中选择最小(或最大)的元素,放到已排序数列的末尾(或开头),以此类推,直到所有元素都排序完成。
具体的步骤如下:
1. 找到数列中最小(或最大)的元素,将其与数列的第一个元素交换位置,将该元素视为已排序部分的末尾(或开头)。
2. 从剩余的未排序元素中找到最小(或最大)的元素,将其与数列的第二个元素交换位置,将该元素视为已排序部分的末尾(或开头)。
3. 重复以上步骤,每次找到一个最小(或最大)的元素,将其放到已排序部分的末尾(或开头),直到所有元素都排序完成。
选择排序的时间复杂度是O(n^2),其中n是待排序数列的长度。虽然选择排序的效率相对较低,但它是一种简单易懂的排序算法,适用于小规模的数据排序。
package 排序算法;
public class 选择排序 {
public static void main(String[] args) {
/*
选择排序:
1,从0索引开始,跟后面的元素一一比较。
2,小的放前面,大的放后面。
3,第一次循环结束后,最小的数据已经确定。
4,第二次循环从1索引开始以此类推。
*/
//1.定义数组
int[] arr = {2, 4, 5, 3, 1};
//2.利用选择排序让数组变成 1 2 3 4 5
/* //第一轮:
//从0索引开始,跟后面的元素一一比较。
for (int i = 0 + 1; i < arr.length; i++) {
//拿着0索引跟后面的数据进行比较
if(arr[0] > arr[i]){
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
}
}*/
//最终代码:
//外循环:几轮
//i:表示这一轮中,我拿着哪个索引上的数据跟后面的数据进行比较并交换
for (int i = 0; i < arr.length - 1; i++) {
//内循环:每一轮我要干什么事情?
//拿着i跟i后面的数据进行比较交换
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
printArr(arr);
}
private static void printArr(int[] arr) {
//3.遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}