想了一个算法
只需要一个交换变量就可以了
排序过程是这样的
- 1, 1, 1, 2, 3, 3, 4, 5, 5
- 1, 2, 1, 1, 3, 3, 4, 5, 5
- 1, 2, 3, 1, 1, 3, 4, 5, 5
- 1, 2, 3, 4, 1, 3, 1, 5, 5
- 1, 2, 3, 4, 5, 3, 1, 1, 5
- 1, 2, 3, 4, 5, 1, 3, 1, 5
- 1, 2, 3, 4, 5, 1, 3, 5, 1
复制代码
排序规则如下
- a[] = {1, 1, 1, 2, 3, 3, 4, 5, 5};
- int part_ok = 0;
- for (i = 1; i < sizeof(a)/sizeof(a[0]); i++) {
- //查找a[i-1]后面第一个比a[i-1]大的数
- //如果遇到比a[i-1]小的数,如果park_ok==1则交换那个数和a[i-1]的位置,park_ok=1,i--,continue
- //如果找到比a[i-1]大的,则交换这个数和a[i]的位置,park_ok=0, continue
- //如果找不到,park_ok=1,i++,continue (这说明其中一个小分公司已经建好)
- }
复制代码
[ 本帖最后由 bleem1998 于 2006-12-29 13:46 编辑 ] |