想了一個(gè)算法
只需要一個(gè)交換變量就可以了
排序過(guò)程是這樣的
- 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
復(fù)制代碼
排序規(guī)則如下
- 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]后面第一個(gè)比a[i-1]大的數(shù)
- //如果遇到比a[i-1]小的數(shù),如果park_ok==1則交換那個(gè)數(shù)和a[i-1]的位置,park_ok=1,i--,continue
- //如果找到比a[i-1]大的,則交換這個(gè)數(shù)和a[i]的位置,park_ok=0, continue
- //如果找不到,park_ok=1,i++,continue (這說(shuō)明其中一個(gè)小分公司已經(jīng)建好)
- }
復(fù)制代碼
[ 本帖最后由 bleem1998 于 2006-12-29 13:46 編輯 ] |