小时候喜欢吃冰糖,妈妈每天会给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++ 简单排序算法之冒泡排序。
今后还会加入其它排序算法的比较,所以这里预先加一个消耗时间的打印,冒泡排序先写到这里了,有什么不懂或者更好的排序方法欢迎留言讨论。