整型數(shù)組按奇偶排序?qū)嶒瀳蟾?/h1>

課程設(shè)計題目:整型數(shù)組按奇偶排序

一贬丛、問題描述

已知數(shù)組 A[n] 中的元素為整型缰犁,設(shè)計算法將其調(diào)整為左右兩部分装蓬,左邊的元素為奇數(shù)腺逛,右邊的元素為偶數(shù)荷愕,并要求算法的時間復(fù)雜度為 O(n)

二棍矛、基本要求

  1. 將數(shù)組按奇偶性排序安疗,奇數(shù)在左,偶數(shù)在右够委。

三荐类、概要設(shè)計

1. 算法的設(shè)計

采用快速排序的思路:設(shè)置兩個指針lr,分別從左向右和從右向左掃描茁帽,當(dāng)l指向偶數(shù)且r指向偶數(shù)時玉罐,交換數(shù)值。

偽代碼如下

void sort_by_parity(int *first, int *last)
{
    last--;
    while (first < last)
    {
        while (first指向奇數(shù)且沒越界) first++;
        while (last指向偶數(shù)且沒越界) last--;
        swap(*first, *last);
        first++, last--;
    }
}
時間復(fù)雜度 空間復(fù)雜度
O(n) O(1)

四潘拨、詳細設(shè)計

1. 設(shè)計每個函數(shù)

主要工作為設(shè)計排序函數(shù)void sort_by_parity(int *first, int *last)吊输,參數(shù)規(guī)定為左閉右開,即實際含first但不含last战秋。具體見前文偽代碼璧亚。

2. 設(shè)計主函數(shù)

主函數(shù)包括輸入數(shù)據(jù)規(guī)模,生成隨機整型數(shù)組并輸出脂信,調(diào)用排序函數(shù)癣蟋,再輸出數(shù)組。

五狰闪、運行與測試

1. 測試環(huán)境

運行環(huán)境:Windows 20H2, i7-9750H @ 2.60GHz, 16GB RAM

編譯器:gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

編譯命令:-g

運行終端:cmd

2. 在調(diào)試程序的過程中遇到的問題與解決方案

暫未發(fā)現(xiàn)異常疯搅。

3. 設(shè)計的測試數(shù)據(jù)與測試結(jié)果

樣例1的數(shù)據(jù)規(guī)模為 n=5。

樣例2的數(shù)據(jù)規(guī)模為 n=10埋泵。

樣例3的數(shù)據(jù)規(guī)模為 n=20幔欧。

4. 程序清單及運行結(jié)果

程序清單如下

// ex2.cpp
// Encoding: UTF-8

/*
 * 2.編寫程序:課本p53頁習(xí)題5(2)
 * 課本p53頁習(xí)題5(2):已知數(shù)組 A[n] 中的元素為整型罪治,設(shè)計算法將其調(diào)整為左右兩部分,
 * 左邊的元素為奇數(shù)礁蔗,右邊的元素為偶數(shù)觉义,并要求算法的時間復(fù)雜度為 O(n) 。
 */

#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;

void sort_by_parity(int *first, int *last)
{
    last--;
    while (first < last)
    {
        while (*first & 1 && first < last)
            first++;
        while (~*last & 1 && first < last)
            last--;
        swap(*first, *last);
        first++, last--;
    }
}

int main()
{
    srand(time(NULL));

    int n;
    cout << "Please input n: ";
    cin >> n;

    int A[n];
    cout << "A: ";
    for (int i = 0; i < n; i++)
        cout << (A[i] = rand()) << " ";
    cout << endl;

    sort_by_parity(A, A + n);
    cout << "Sorting by parity complete." << endl;

    cout << "A: ";
    for (int i = 0; i < n; i++)
        cout << A[i] << " ";
    cout << endl;

    return 0;
}

樣例 1(符合預(yù)期)

D:\OneDrive - mail2.sysu.edu.cn\MyDocuments\code\DSA\week03>ex2
Please input n: 5
A: 208 15909 14589 16796 18237
Sorting by parity complete.
A: 18237 15909 14589 16796 208

樣例 2(符合預(yù)期)

D:\OneDrive - mail2.sysu.edu.cn\MyDocuments\code\DSA\week03>ex2
Please input n: 10
A: 172 28749 14691 14243 3081 20052 557 2788 1706 2433
Sorting by parity complete.
A: 2433 28749 14691 14243 3081 557 20052 2788 1706 172

樣例 3(符合預(yù)期)

D:\OneDrive - mail2.sysu.edu.cn\MyDocuments\code\DSA\week03>ex2
Please input n: 20
A: 221 26135 20510 14745 26728 13417 14475 24415 20004 8516 11786 2040 346 10209 17337 11159 17600 15913 7601 3196
Sorting by parity complete.
A: 221 26135 7601 14745 15913 13417 14475 24415 11159 17337 10209 2040 346 11786 8516 20004 17600 26728 20510 3196

六浴井、總結(jié)與心得

如果數(shù)組是由鍵盤輸入的晒骇,那么采用鏈表也是可以的。

七磺浙、參考資料

  1. 王紅梅, 胡明, 王濤. 數(shù)據(jù)結(jié)構(gòu)(C++版)[M]. 2 版. 清華大學(xué)出版社, 2011.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末洪囤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撕氧,更是在濱河造成了極大的恐慌瘤缩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伦泥,死亡現(xiàn)場離奇詭異剥啤,居然都是意外死亡,警方通過查閱死者的電腦和手機奄喂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門铐殃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來海洼,“玉大人跨新,你說我怎么就攤上這事』捣辏” “怎么了域帐?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長是整。 經(jīng)常有香客問我肖揣,道長,這世上最難降的妖魔是什么浮入? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任龙优,我火速辦了婚禮,結(jié)果婚禮上事秀,老公的妹妹穿的比我還像新娘彤断。我一直安慰自己,他們只是感情好易迹,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布宰衙。 她就那樣靜靜地躺著,像睡著了一般睹欲。 火紅的嫁衣襯著肌膚如雪供炼。 梳的紋絲不亂的頭發(fā)上一屋,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音袋哼,去河邊找鬼冀墨。 笑死,一個胖子當(dāng)著我的面吹牛涛贯,可吹牛的內(nèi)容都是我干的轧苫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疫蔓,長吁一口氣:“原來是場噩夢啊……” “哼含懊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衅胀,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岔乔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后滚躯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雏门,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年掸掏,在試婚紗的時候發(fā)現(xiàn)自己被綠了茁影。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡丧凤,死狀恐怖募闲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愿待,我是刑警寧澤浩螺,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站仍侥,受9級特大地震影響要出,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜农渊,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一患蹂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砸紊,春花似錦传于、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至徽鼎,卻和暖如春盛末,著一層夾襖步出監(jiān)牢的瞬間弹惦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工悄但, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棠隐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓檐嚣,卻偏偏與公主長得像助泽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嚎京,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容