选择排序选择当前最小的元素并将其交换到位。
运作方式如下:
- 在数组中找到最小的元素,并将其与第一个元素交换。
- 找到第二个最小的元素,并与数组中的第二个元素交换。
- 找到第三个最小的元素,然后与数组中的第三个元素交换智慧。
- 重复查找下一个最小元素并将其交换到正确位置的过程,直到对整个数组进行排序为止。
算法示例
Java程序
import java.util.Arrays;
class SelectionSortDemo {
public static void selectionSort(int arr[]) {
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
// Finding the minimum element in the unsorted part of array
int min = i;
for (int j = i + 1; j < len; j++)
if (arr[j] < arr[min])
min = j;
/*
* Swapping the found minimum element with the first element of the sorted
* subarray using temp variable
*/
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
System.out.println(i + "次处理:" + Arrays.toString(arr));
}
}
public static void main(String args[]) {
int[] arr = { 29, 72, 98, 13, 87, 66, 52, 51, 36 };
System.out.println("未排序:" + Arrays.toString(arr));
selectionSort(arr);
System.out.println("排序后:" + Arrays.toString(arr));
}
}
输出:
未排序:[29, 72, 98, 13, 87, 66, 52, 51, 36]
0次处理:[13, 72, 98, 29, 87, 66, 52, 51, 36]
1次处理:[13, 29, 98, 72, 87, 66, 52, 51, 36]
2次处理:[13, 29, 36, 72, 87, 66, 52, 51, 98]
3次处理:[13, 29, 36, 51, 87, 66, 52, 72, 98]
4次处理:[13, 29, 36, 51, 52, 66, 87, 72, 98]
5次处理:[13, 29, 36, 51, 52, 66, 87, 72, 98]
6次处理:[13, 29, 36, 51, 52, 66, 72, 87, 98]
7次处理:[13, 29, 36, 51, 52, 66, 72, 87, 98]
排序后:[13, 29, 36, 51, 52, 66, 72, 87, 98]
package ask;
import java.util.Arrays;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
int[] array = new int[] { 2, 5, 1, 6, 3, 4 };
sort1(array);
}
public static void sort1(int array[]) {
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[i]) {
int x = array[i];
array[i] = array[j];// 最小值移到前面去
array[j] = x;
}
}
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
1
2
3
4
5
6
package main
import (
"fmt"
)
func SelectionSort2(arr []int) {
size := len(arr)
var i, j, min int
for i = 0; i < size-1; i++ {
min = i
for j = i + 1; j < size; j++ {
if arr[j] < arr[min] {
min = j
}
}
arr[i], arr[min] = arr[min], arr[i]
fmt.Println(arr)
}
}
func main() {
data := []int{29, 72, 98, 13, 87, 66, 52, 51, 36}
SelectionSort2(data)
fmt.Println(data)
}