原理
每次從數組中選取最小的數字放在第一個位置,直到數組最後一個位置也被放上合適的數字。
分析
由於每次選擇最小的數字過程中,每個數字都會被遍歷一次,總共會選擇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])); } }