十大排序算法:选择排序
1.算法介绍
1.1 算法步骤:
假设需要对一个无序数组进行递增排序,一趟定义如下:第一趟,首元素是数组第一位,取该趟最小元素坐标为该趟第一位下标(数组第一位下标),然后遍历整趟其余元素,遇到比该趟第一位(数组第一位)小的,min更新为该元素下标,整趟下来,min一定是该趟最小元素的下标。然后将该趟第一位(数组第一位)交换,此时该趟最小元素放在该趟第一位(数组第一位)。进入下一趟,首元素是数组第二位,取该趟最小元素为该趟第一位下标(数组第二位下标)......直到结束,数组递增有序。
1.2 算法稳定性
仔细体会一遍排序过程,原先相等的相邻元素,有可能在过程中交换位置,所以是不稳定的排序算法。
1.3 时间复杂度
时间复杂度为O(n*n)。
2.动画演示
3.Java实现
import java.util.Arrays;
public class SelectionSort{
public int[] selectionSort(int[] sourceArray){
int[] array = Arrays.copyOf(sourceArray, sourceArray.length);
for(int i = 0; i < array.length; i++){
int min = i; //存放当前趟“首元素”下标,0,1,2...array.length-1
for(int j = i+1; j < array.length - 1; j++){
//跟当前趟“首元素”比较,最后结果min等于当前趟最小元素下标
if(array[min] > array[j]){
min = j;
}
}
//当前趟"首元素”与当前最小元素交换
{
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
return array;
}
}
4.Python实现
def selectionSort(array):
for i in range(1, length(array)):
min = i
for j in range(i+1, length(array)-1):
if(array[min] > array[j]):
min = j
temp = array[i];
array[i] = array[min];
array[min] = temp;