小時候喜歡吃冰糖,媽媽每天會給6個糖給吃一週,我每天都犯愁該怎麼吃比較好:先吃大的,今後每天都比今天吃的小;先吃小的,總覺得今天吃得有點少;對此這些一眼能看出來冰糖的大小,其實也是一種排序。
例如:這周給的糖數值大小
{5, 2, 1, 7, 10, 3}
第一天先選擇最小的1,第二天選擇2,一直到第六點吃最大的,這種就是一個選擇排序的過程,代碼如下:
// 簡單快速排序
// param a:待排序數組
// param nTotalCount:數組長度
void sortSeletc(int a[], int nTotalCount)
{
int nMinPos; // 最小數據所在數組位置
for (int i = 0; i < nTotalCount; i++)
{
nMinPos = i;
for (int j = i + 1; j < nTotalCount; j++)
{
if (a[nMinPos] > a[j])
{
nMinPos = j;
}
}
// 交換數值
if (nMinPos != i)
{
int temp = a[nMinPos];
a[nMinPos] = a[i];
a[i] = temp;
}
}
}
簡單選擇排序時間複雜度最差是O(n²),所以並不是最優排序算法。
測試代碼見我的上一篇文章:C++ 簡單排序算法之冒泡排序。
今後還會加入其它排序算法的比較,所以這裏預先加一個消耗時間的打印,冒泡排序先寫到這裏了,有什麼不懂或者更好的排序方法歡迎留言討論。