#include<stdio.h>
void print_array(int a[], int n) { //遍历数组
for (int i = 1;i <= n;i++) {
printf("%d ", a[i - 1]);
}
printf("\n");
}
void swap(int *a,int *b) { //交换数组中的值
int temp = *a;
*a = *b;
*b = temp;
}
void selection_sort(int a[],int n){
for(int i=0;i<n;i++){
int min = i;
for(int j=i+1;j<n;j++){
if(a[min]>a[j])
min = j ;
}
swap(&a[i],&a[min]);
}
print_array(a,n);
}
int main(void){
int a[]={3,2,5,7,5,4};
selection_sort(a,6);
}
总的来说就是从一堆数中依次选出最小的放在最前面,再在剩下的数中选出最小的放在第二个位置。一开始想再设一个b数组用来装排序好的a,后来发现那样的话a数组还是无序状态有点难办。
然后空间复杂度是O(n²),因为第一次就要判断n-1次,第二次n-2次……