排序入門練習題8 整數奇偶排序 題解

2022-08-19 22:24:10 字數 1000 閱讀 9969

題目出處:《資訊學奧賽一本通》第二章上機練習6,略有改編

題目描述

告訴你包含 \(n\) 個數的陣列 \(a\) ,你需要把他們按照「奇數排前面,偶數排後面;奇數從從小到大排,偶數從大到小排」的順序輸出。

輸入格式

輸入的第一行包含乙個整數 \(n(1 \le n \le 1000)\)。

輸入的第二行包含 \(n\) 個整數 \(a_1,a_2,……,a_n\) 。表示陣列中的 \(n\) 個元素,兩兩之間用乙個空格分隔。

輸出格式

輸出佔一行,按照「奇數排前面,偶數排後面;奇數從從小到大排,偶數從大到小排」的順序輸出,兩個數之間用乙個空格分隔。

樣例輸入

6

1 2 3 4 5 6

樣例輸出
1 3 5 6 4 2
題目分析

這道題目主要就是考比較函式。

我們需要寫乙個比較函式,實現如下邏輯:

按照這種邏輯,實現的比較函式如下:

bool cmp(int a, int b) 

else if (a % 2 == 1)

else

}

上面的比較函式過於繁瑣,可進行一定的精簡,如下:

bool cmp(int a, int b)
或者,我們還可以使用更精簡一點的寫法。

這種寫法是只用邏輯運算子來銜接各條件表示式的寫法:

bool cmp(int a, int b)
這個比較函式其實使用了兩個邏輯或(||)符號來銜接了三個邏輯表示式,它們分別是:

完整實現**如下:

#include using namespace std;

int n, a[1001];

bool cmp(int a, int b)

int main()

排序練習題

一 選擇題 1 以下序列不是堆的是 d a 100,85,98,77,80,60,82,40,20,10,66 b 100,98,85,82,80,77,66,60,40,20,10 c 10,20,40,60,66,77,80,82,85,98,100 d 100,85,40,77,80,60,6...

華為機試練習題 6 整數排序

題目 描述 實現輸入一組大於等於0的整數,根據從小到大的順序排序後輸出,排序後有連續數時,只輸出連續數中最小和最大的兩個數。題目類別 排序 難度 高階 執行時間限制 10sec 記憶體限制 128mbyte 階段 入職前練習 輸入 一組大於等於0的整數,不考慮非法輸入,各個整數之間以逗號 分隔,輸入...

小範圍排序練習題

已知乙個幾乎有序的陣列,幾乎有序是指,如果把陣列排好順序的話,每個元素移動的距離可以不超過k,並且k相對於陣列來說比較小。請選擇乙個合適的排序演算法針對這個資料進行排序。給定乙個int陣列a,同時給定a的大小n和題意中的k,請返回排序後的陣列 解題思路 因為該資料是差不多有序,肯定用插入排序複雜度了...