原理
每次从数组中选取最小的数字放在第一个位置,直到数组最后一个位置也被放上合适的数字。
分析
由于每次选择最小的数字过程中,每个数字都会被遍历一次,总共会选择n(n为数组长度)次,所以其最好和最坏情况下的时间复杂度都是O(n2);由于其选择交换操作都是在原数组上进行,所以空间复杂度为O(1)。
C语言实现
void swap(void *a, void *b, int size) { void *tmp = Malloc(size); memcpy(tmp, a, size); memcpy(a, b, size); memcpy(b, tmp, size); free(tmp); } Boolean select(int *arr, int arrlen) { int i = 0, j = 0; int minindex = 0; if(NULL == arr || 0 >= arrlen){ printf("Invalid input...\n"); return FALSE; } for(i = 0; i < arrlen ; ++i){ minindex = i; for(j = i; j < arrlen; ++j){ if(arr[j] < arr[minindex]){ minindex = j; } } swap(arr+minindex, arr+i, sizeof(arr[i])); } }