using namespace std;
int main()
{
void sort(int[], int);
int array[] = {3,2,4,9,1,5,7,6,8};
int n = sizeof(array)/sizeof(int*);
sort(array, n);
for(int i = 0; i < n; ++i)
cout<<array[i]<<" ";
cout<<endl;
return 0;
}
//簡單選擇排序
//array爲測試數組,n爲數組長度
void sort(int array[], int n)
{
int temp,min;
for(int i = 0; i < n - 1; ++i)
{
min = i;
//循環找出剩餘元素中最小的一個
for(int j = i + 1; j < n; ++j)
{
if(array[min] > array[j])
{
min = j;
}
}
//將最小值與第一個元素交換位置
if(min != i)
{
temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
運行結果:
D,複雜度分析
(a)時間複雜度:
1)整個過程當中簡單選擇排序需要比較的次數與初始狀態無關,總的比較次數爲1+2+3+...+n-1=n(n- 1)/2,所以進行比較的時間複雜度爲O(n^2);
2)如果初始數組爲降序排序,則需要進行n-1次交換,所以進行交換操作的時間複雜度爲O(n)。
(b)空間複雜度:程序中定義了兩個變量temp和min,所以空間複雜度爲O(1)。