定义
简单选择排序的基本思想:
第1趟,在待排序记录r[1] ~ r[n]中选出最小的记录,将它与r[1]交换;
第2趟,在待排序记录r[2] ~ r[n]中选出最小的记录,将它与r[2]交换;
以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
定义图解
简单示例
Java
public class SelectSort {
public static void main(String[] args) {
int[] arr = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
selectSort(arr);
}
private static void selectSort(int[] arr) {
int size = arr.length;
for (int i = 0; i < size; i++) {
int minIndex = i;
for (int j = i + 1; j < size; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
//示例图片上交换的位置
//swap(arr,j,i);
}
}
//优化过性能更好
swap(arr, i, minIndex);
System.out.print(arr[i] + ",");
}
}
private static void swap(int[] arr, int x, int y) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
Kotlin
fun main(args: Array<String>) {
val arr: IntArray = intArrayOf(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
sortSelect(arr)
}
fun sortSelect(intArray: IntArray) {
val size = intArray.size
for (i in 0 until size) {
var minIndex: Int = i
var j: Int = i + 1
while (j < size) {
if (intArray[j] < intArray[minIndex]) {
minIndex = j
}
j++
}
swap(intArray, i, minIndex)
print("${intArray[i]},")
}
}
fun swap(intArray: IntArray, i: Int, j: Int) {
var temp = intArray[i]
intArray[i] = intArray[j]
intArray[j] = temp
}
遇到的坑
- 写交换方法的时候,要用数组,这个跟基本类型有关系
- 如果把整形数组换成Object,这样要使用Integer,int不行
- kotlin的for循环和java的不一样,用while