/**
* =========================================================================
*选择排序法
*找到第一个最小的数字,放在第一个位置;再找到第二个小的数字,放在第二个位置
*一次找一个数字,如此循环,知道把所有数字到排序好
*
*命题A 对于长度为N的数组,选择排序需要大约N^2/2次比较和N次交换
*证明:略
*==========================================================================
**/
#include <stdio.h>
void swap(int *x, int *y);
void selection_sort(int *a, int size);
void print_arr(int *a, int size);
int main(){
int array[] = {23,4,54,32,11,98,7,657,45,34,375,44};
int length = sizeof array / sizeof array[0];
selection_sort(array, length);
puts("After selection sort:");
print_arr(array, length);
return 0;
}
void swap(int *x, int *y){
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void selection_sort(int *a, int size){
int i, j, min;
for(i = 0; i < size; ++i){
min = i;
for(j = i+1; j < size; ++j){
if(a[j] < a[min])
min = j;
}
swap(&a[i], &a[min]);
}
}
void print_arr(int *a, int size){
int i;
for(i = 0; i < size; ++i)
printf("%d ", *(a+i));
putchar('\n');
}