雙線程冒泡排序算法

雙線程冒泡排序算法是對(duì)冒泡排序的優(yōu)化债沮,對(duì)冒泡排序加入了另外一個(gè)線程洽瞬。

冒泡排序可以從數(shù)組的第0個(gè)元素開始排列儡循,同樣也可以從最后一個(gè)元素開始排列隔披。 無論是從左往右排列還是從右往左排列篮洁,排列出來的效果是一樣的裳扯。

我的優(yōu)化方法就是,一個(gè)線程從左往右執(zhí)行冒泡排序算法芥炭,另外一個(gè)線程從右往左執(zhí)行冒泡排序算法享怀。兩個(gè)線程分別執(zhí)行到數(shù)組的中間位置羽峰,之后停止排列趟咆。最后把排列好的右邊一半的數(shù)組和左邊一半的數(shù)組添瓷,拼接起來就得到一個(gè)完整地排列好的數(shù)組。

雖然項(xiàng)目中很少由程序員去編寫冒泡排序算法值纱。然而我覺得并行排序算法一定會(huì)有它的優(yōu)勢(shì)鳞贷。對(duì)冒泡排序使用雙線程排序后,排序的時(shí)間會(huì)接近原來的二分之一虐唠。

同樣的方法適用于二分查找和其他排序算法搀愧。 待更新。我已經(jīng)寫好了代碼并且放到了gitee上面:https://gitee.com/sunshugang/two-threaded-bubble-sort

//
//  main.c
//  Two-threadedBubbleSort
//
//  Created by 孫樹港 on 2021/12/25.
//

#include <stdio.h>
#include <pthread/pthread.h>

//冒泡排序從左邊開始排序
//最右邊都是最大的
void *sort(int *a)
{
    int len = 10;
    int i=0;
    int j;
    int t;
    for(i = 0; i < len - 1; i ++)
    {
        for(j = 0; j < len - 1  - i; j ++)
        {
            if(a[j] > a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
        
        if (i == 4) {
            break;;
        }
    }
    
    printf("b: ");
    for(int i = 0;i < 10;i ++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    
    return (void *)0;
}


//冒泡排序從右邊開始排
//最右邊是最大的
void* sortFromTheEnd(int* a)
{
    int len = 10;
    int tmp = 0;
    for (int i = len - 1; i >= 0; i --)
    {
        for (int j = len - 1; j >= len - i; j --)
        {
            if (a[j] < a[j - 1])
            {
                tmp = a[j];
                a[j] = a[j - 1];
                a[j - 1] = tmp;
            }
        }
        
        if (i == 5) {
            break;;
        }
    }
    
    printf("a: ");
    for(int i = 0;i < 10;i ++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    
    return (void *)0;
}

int main(int argc, const char * argv[]) {
    // insert code here...
    int a[10]={
        2, 3, 77, 12, -88, 0, -8, 99, 100, -999
    };
    int b[10]={
        2, 3, 77, 12, -88, 0, -8, 99, 100, -999
    };
    
    //add thread
    pthread_t tidp, tidp1;
    int ret, ret1;
    ret = pthread_create(&tidp, NULL, sortFromTheEnd, a);
    ret1 = pthread_create(&tidp1, NULL, sort, b);
    
    if (ret) {
        printf("pthread_create failed:%d\n", ret);
        return  -1;
    }
    if (ret1) {
        printf("pthread1_create failed:%d\n", ret1);
        return  -1;
    }
    
    pthread_join(tidp1, NULL);
    pthread_join(tidp, NULL);
    
    int c[10];
    for (int i = 0; i < 10; i ++) {
        if (i <= 5) {
            c[i] = a[i];
        } else {
            c[i] = b[i];
        }
    }
    
    printf("c: ");
    for(int i = 0;i < 10;i ++)
    {
        printf("%d ",c[i]);
    }
    printf("\n");
    
    printf("Hello, World!\n");
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疆偿,一起剝皮案震驚了整個(gè)濱河市咱筛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杆故,老刑警劉巖迅箩,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異处铛,居然都是意外死亡饲趋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門撤蟆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奕塑,“玉大人,你說我怎么就攤上這事家肯×渑椋” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵讨衣,是天一觀的道長(zhǎng)寝贡。 經(jīng)常有香客問我扒披,道長(zhǎng),這世上最難降的妖魔是什么圃泡? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任碟案,我火速辦了婚禮,結(jié)果婚禮上颇蜡,老公的妹妹穿的比我還像新娘价说。我一直安慰自己,他們只是感情好风秤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布鳖目。 她就那樣靜靜地躺著,像睡著了一般缤弦。 火紅的嫁衣襯著肌膚如雪领迈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天碍沐,我揣著相機(jī)與錄音狸捅,去河邊找鬼。 笑死累提,一個(gè)胖子當(dāng)著我的面吹牛尘喝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斋陪,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼朽褪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了无虚?” 一聲冷哼從身側(cè)響起缔赠,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎友题,沒想到半個(gè)月后嗤堰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咆爽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年梁棠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗埂。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡符糊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呛凶,到底是詐尸還是另有隱情男娄,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站模闲,受9級(jí)特大地震影響建瘫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尸折,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一啰脚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧实夹,春花似錦橄浓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缴淋,卻和暖如春准给,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背重抖。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工露氮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仇哆。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓沦辙,卻偏偏與公主長(zhǎng)得像夫植,于是被迫代替她去往敵國(guó)和親讹剔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • ?自從上一篇簡(jiǎn)書發(fā)布到現(xiàn)在详民,差不多也有兩個(gè)月了延欠。小編原本五一假期打算整理下有關(guān)排序的一些算法,沒成想放假第一天就因...
    ITsCLG閱讀 623評(píng)論 0 1
  • 最近聽了王爭(zhēng)老師的數(shù)據(jù)結(jié)構(gòu)與算法之美,大有獲益,特寫此博客與大家分享. 排序算法太多了沈跨,但大體可以歸結(jié)于三類,冒泡...
    我是碼神閱讀 12,178評(píng)論 1 11
  • ??冒泡排序法(Bubble Sort)是所有排序算法中最簡(jiǎn)單由捎、最基本的一種。冒泡排序法的思路就是交換排序饿凛,通過相...
    一笑小先生閱讀 969評(píng)論 0 6
  • 冒泡排序(Bubble Sort)算法是所有排序算法中最簡(jiǎn)單狞玛、最基本的一種。冒泡排序算法的思路就是交換排序涧窒,通過相...
    敲代碼的蝌蚪閱讀 438評(píng)論 0 1
  • 什么是冒泡排序心肪? 摘自漫畫算法: 冒泡排序的英文是bubble sort,它是一種基礎(chǔ)的交換排序纠吴。 大家一定都喝過...
    花逝97閱讀 387評(píng)論 0 2