多路歸併排序 排序演算法總結(1)

2021-10-12 07:52:07 字數 2389 閱讀 2012

排序演算法分為內部排序演算法和外部排序演算法(多路歸併排序)

內部排序:

插入排序交換排序選擇排序歸併排序

基數排序

直接插入排序

氣泡排序

簡單選擇排序

折半插入排序

快速排序

堆排序希爾排序

(1)直接插入排序

將乙個記錄插入到已排好序的序列中,從而得到乙個新的有序序列(將序列的第乙個資料看成是乙個有序的子串行,然後從第二個記錄逐個向該有序的子串行進行有序的插入,直至整個序列有序)

重點:使用哨兵,用於臨時儲存和判斷陣列邊界。

2.排序流程圖

3.c語言**

4.演算法分析

(2)折半插入排序

演算法思想

折半插入排序與直接插入排序演算法原理相同。只是,在向已排序的資料中插入資料時,採用來折半查詢(二分查詢)。先取已經排序的序列的中間元素,與待插入的資料進行比較,如果中間元素的值大於待插入的資料,那麼待插入的資料屬於陣列的前半部分,否則屬於後半部分。依次類推,不斷縮小範圍,確定要插入的位置。

2.c語言**

3.演算法分析

(3)希爾排序

1.希爾排序是希爾(donald shell)於2023年提出的一種排序演算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的乙個更高效的版本,也稱為縮小增量排序,同時該演算法是衝破o(n2)的第一批演算法之一

簡單插入排序很循規蹈矩,不管陣列分布是怎麼樣的,依然一步一步的對元素進行比較,移動,插入,比如[5,4,3,2,1,0]這種倒序序列,陣列末端的0要回到首位置很是費勁,比較和移動元素均需n-1次。而希爾排序在陣列中採用跳躍式分組的策略,通過某個增量將陣列元素劃分為若干組,然後分組進行插入排序,隨後逐步縮小增量,繼續按組進行插入排序操作,直至增量為1。希爾排序通過這種策略使得整個陣列在初始階段達到從巨集觀上看基本有序,小的基本在前,大的基本在後。然後縮小增量,到增量為1時,其實多數情況下只需微調即可,不會涉及過多的資料移動。

我們來看下希爾排序的基本步驟,在此我們選擇增量gap=length/2,縮小增量繼續以gap = gap/2的方式,這種增量選擇我們可以用乙個序列來表示,,稱為增量序列。希爾排序的增量序列的選擇與證明是個數學難題,我們選擇的這個增量序列是比較常用的,也是希爾建議的增量,稱為希爾增量,但其實這個增量序列不是最優的。此處我們做示例使用希爾增量。

void shellsort(int a,int n)        a[j+dk]=a[0];//插入      }    }  }  a[0] = temp;}int main();  shellsort(a,10);  for(int i=0;i<10;i++)  return 0;}

2.效能分析

以上部分內容**於

多路歸併排序

我們有如下乙個問題 對於若干個長度相同的序列,將其合併成乙個有序的序列。暴力的方法顯然是不可取的,這裡可以利用優先佇列來處理這個問題。首先從簡單的開始,對於2路歸併排序,設兩個序列為,將,排序,有 a1 a2 a3 an b1 b2 b3 bn 建立乙個優先佇列,佇列中首先存入元素 a1,0 b1,...

多路歸併排序

下面的問題描述及相關文字都參考於csdn中july的部落格,在此對july表示感謝。july的部落格位址如下 在對海量資料排序時,有時不能把資料全部匯入到記憶體中,這時需要用到多路歸併排序。比如輸入 乙個最多含有n個不重複的正整數 也就是說可能含有少於n個不重複正整數 的檔案,其中每個數都 小於等於...

多路歸併排序

雪壓枝頭低,雖低不著泥 今天準備放假,無聊看到乙個場景題,問題如下 有乙個檔案裡面儲存著很多很多很多的無序的數,然後要求進行乙個排序,記憶體限定,磁碟足夠 然後搗鼓了一下,學到了一種新技能 多路歸併排序 學習的過程是這樣的 第一步 把儲存著很多很多很多數的檔案進行切割,切割成n個小檔案,每個小檔案都...