选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
算法思路:
每一次从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
算法描述:
1、第一轮排序,在无序区中选出最小的记录,将它与无序区的第1个记录交换,使有序区记录个数增加1个(即记录个数变为1个),无序区记录个数减少1个。
2、第二轮排序,在无序区中选出最小的记录,将它与无序区的第1个记录交换,使有序区记录个数增加1个(即记录个数变为2个),无序区记录个数减少1个。
3、如此下去,重复以上过程,直至最终完成排序。
Python代码:
# Get min num
def getmin(arr):
min = arr[0];
min_index = 0;
for i in range(0,len(arr)):
if arr[i]<min:
min = arr[i]
min_index = i
return min_index
#SelectSort
def selectSort(arr):
newArr = [];
for i in range(0,len(arr)):
min = getmin(arr);
newArr.append(arr.pop(min))
return newArr;
#test the output
a = [9, 3, 5, 7, 2, 6, 1, 98, 45, 67]
print(selectSort(a))
Java实现:
public class SelectionSort {
public static void selectionSort(int[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
int k = i;
// 找出最小值的小标
for (int j = i + 1; j < n; j++) {
if (a[j] < a[k]) {
k = j;
}
}
// 将最小值放到排序序列末尾
if (k > i) {
int tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
}
public static void main(String[] args) {
int[] b = { 49, 38, 65, 97, 76, 13, 27, 50 };
selectionSort(b);
for (int i : b)
System.out.print(i + " ");
}
}