选择排序的思想比较简单将数组中最大的数与数组的最后一个数交换位置,然后再将数组截去最后一个数,再次将新数组中的最大数与新数组的最后一个数交换位置。一直循环下去,直到数组的长度为1
下面是插入排序的c语言
#include <stdio.h>
int findMaxPos(int arr[],int n){
int max = arr[0];
int pos = 0;
int i;
for (i=0; i<n; i++){
if (arr[i] > max){
max = arr[i];
pos = i;
}
}
return pos;
}
void selectionSort(int arr[], int n){
int i;
while (n > 1){
int pos = findMaxPos(arr,n);
int temp = arr[pos];
arr[pos] = arr[n-1];
arr[n-1] = temp;
n--;
}
}
int main(){
int arr[] = {5,8,9,7,6,1,2,4,3};
selectionSort(arr,9);
int i;
for (i=0;i<9;i++){
printf("%d\n",arr[i]);
}
return 0;
}
随手也写了一个python的实现
def findMaxPos(nums):
return nums.index(max(nums))
def selection_sort(nums):
len_nums = len(nums)
while len_nums > 1:
pos = findMaxPos(nums[:len_nums-1])
nums[len_nums-1],nums[pos] = nums[pos],nums[len_nums-1]
len_nums -= 1
if __name__ == "__main__":
nums = [4,2,6,5,3]
selection_sort(nums)
print(nums)