題目大意:
將n個字串分成n/2個字串(從上到下2個為一組),然後按順序將每一組的第乙個字串放在頂端,第二個放在底部,依次放進,最後乙個字串排在中間。
(前提是要先按照字串大小從小到大排序,然後相同長度的兩個字串位置不進行改變)
解題思路:
1.先對字串進行排序(必須採用氣泡排序、歸併排序等穩定排序,不穩定排序會導致相同長度的字串前後位置不一,例如:選擇排序、快排[該題可以過,可能測試資料比較水,各位可以測試一下])
2.對字串進行隔層輸出,如果是個數為奇數(例如9個:則按1、3、5、7、9、8、6、4、2輸出),如果是偶數(例如10個:則按1、3、5、7、9、10、8、6、4、2輸出)【最大的放中間、最小的放兩邊】
知識補充:選擇排序、快速排序、希爾排序、堆排序是不穩定的排序演算法,而氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。詳細請見: 參考可見:
**如下(c++ / 氣泡排序法):
#include
#include
#include
#include
#include
using
namespace
std;
int
main()
for
(i=0;i
for
(j=0;j
if
(
strlen
(a[j])>
strlen
(a[j+1]))
}
}
printf
(
"set %d\n"
,k);
k++;
for
(i=0;i
printf
(
"%s\n"
,a[i]);
}
if
(n%2!=0)
n--;
for
(i=n-1;i>=0;i-=2)
}
return
0;
}
穩定排序和非穩定排序
首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果ai aj,ai原來在位置前,排序後ai還是要在aj位置前。其次,說一下穩定性的好處。排序演算法如果是穩定的,那麼從乙個鍵上排序,然後再從另乙個...
排序 穩定排序和不穩定排序
這幾天筆試了好幾次了,連續碰到乙個關於常見排序演算法穩定性判別的問題,往往還是多選,對於我以及和我一樣拿不準的同學可不是乙個能輕易下結論的題目,當然如果你筆試之前已經記住了資料結構書上哪些是穩定的,哪些不是穩定的,做起來應該可以輕鬆搞定。本文是針對老是記不住這個或者想真正明白到底為什麼是穩定或者不穩...
穩定排序和不穩定排序
這幾天筆試了好幾 次了,連續碰到乙個關於常見排序演算法穩定性判別的問題,往往還是多選,對於我以及和我一樣拿不準的同學可不是乙個能輕易下結論的題目,當然如果你筆試之前 已經記住了資料結構書上哪些是穩定的,哪些不是穩定的,做起來應該可以輕鬆搞定。本文是針對老是記不住這個或者想真正明白到底為什麼是穩定或者...