1. 程式人生 > >排序系列之(1)歸併排序及C語言實現

排序系列之(1)歸併排序及C語言實現

有很多演算法在結構上是遞迴的:為了解決一個給定的問題,演算法需要一次或多次遞迴的呼叫其本身來解決相關的問題。這些演算法通常採用分治策略:將原問題劃分成n個規模較小而結構與原問題相似的子問題;遞迴的解決這些子問題,然後將結果合併,就能得到原問題的解。

分治模式在遞迴時一般都有三個步驟

分解:將原問題分解成一系類子問題

解決:遞迴的解各子問題。若子問題足夠小,則直接求解。

合併:將子問題的結果合併成原問題的解。

歸併排序在演算法上完全依照了上述模式,操作如下。

分解:將n個元素分解成n/2個元素的子序列

解決:用合併排序法對兩個子序列遞迴地排序

合併:將子問題的結果合併原問題的解。

以下是原始碼實現

相關推薦

排序系列1歸併排序C語言實現

有很多演算法在結構上是遞迴的:為了解決一個給定的問題,演算法需要一次或多次遞迴的呼叫其本身來解決相關的問題。這些演算法通常採用分治策略:將原問題劃分成n個規模較小而結構與原問題相似的子問題;遞迴的解決這些子問題,然後將結果合併,就能得到原問題的解。 分治模式在遞迴時一般都有三

排序系列4希爾排序C語言實現

希爾排序(Shell Sort)也稱為遞減增量排序演算法,是插入排序的一種高速而安定的改良版。因希爾(Donald L. Shell)於1959年提出而得名。各種實現在如何進行遞減上有所不同。 希爾排序是基於插入排序的以下兩點性質而提出改進方法的: 插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達

排序算法1——冒泡排序

除了 分析 .... sqli span als 排序。 lag AS 冒泡排序 冒泡排序可以說是最簡單的一種排序,當然,復雜度也是最高的 冒泡排序的實現過程:兩兩之間相互比較,當前者比後者大的時候,兩者交換(假設是升序排列)。 那麽給出簡單的冒泡排序算法: #defin

排序演算法選擇排序

原理: 每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。 思路: n個數進行n-1次排序 每一次排

排序演算法氣泡排序

原理: 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的步驟,直到沒有任何

常用排序演算法總結1-- 比較排序

我們通常所說的排序演算法往往指的是內部排序演算法,即資料記錄在記憶體中進行排序。 排序演算法大體可分為兩種: 一種是比較排序,時間複雜度O(nlogn) ~ O(n^2),主要有:氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。 另一種是非比較排序,時間複雜度可以達到O(n),

從零開始搭建大資料平臺系列1——環境準備

1、機器準備 (1)物理機配置 處理器:Intel® Core™ i7 處理器 記憶體:8.00GB 系統型別:64 位作業系統,基於 x64 的處理器 作業系統:Windows 10 專業版 (2)磁碟陣列 常用磁碟陣列型別:RAID 0,RAID 1,RAI

八大排序演算法氣泡排序

氣泡排序演算法原理:比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後一個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數

資料結構排序——歸併排序

歸併排序(Merging Sort):假設初始序列含有n個記錄,則可以看成是n個有序的子序列,每個子序列的長度為1,然後倆倆歸併,得到[n/2]([x]表示不小於x的最小整數)個長度為2或1的有序子序列;再倆倆歸併,....,如此重複,直至得到一個長度為n的有序序列為止,這

第16周專案1 驗證演算法7歸併排序

問題: /* * Copyright (c)2015,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:專案1-7.cbp * 作 者:張芸嘉 * 完成日期:2015年12月18日 * 版 本 號

C#算法系列6——歸併排序

       本文主要描述了歸併排序的兩種實現方式,遞迴方式和非遞迴方式,以及二者的優缺點比較。下面首先介紹一下歸併排序的原理。 一、理解歸併排序        歸併排序的本質:通過兩兩合併排序再合併,最終獲得了一個有序的陣列。通過在紙上演示,就會發現它

java算法----排序----1插入排序

pan 排序 string ack src [] AR style inf 1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---插入排序 7 * 8

資料結構——排序與查詢1——排序與查詢簡介

排序與查詢 排序,是指將一系列無序的記錄,通過某種方式或者演算法,將其變為有序的過程。如果排出來的順序是由小到大排列,我們就稱這種排序叫升序排序。如果是由大到小,我們就稱為降序排序。例如有一組資料 : 開始時為: 2 4 7 1 9 升序排序: 1 2 4 7 9 降序排序: 9 7

經典排序演算法1——氣泡排序演算法詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

從零開始學演算法歸併排序

從零開始學演算法(四)歸併排序 歸併排序 演算法介紹 演算法原理 演算法簡單記憶說明 演算法複雜度和穩定性 程式碼實現 歸併排序 程式碼是Javascript語言寫的(幾乎是虛擬碼) 演算

java排序演算法------歸併排序

歸併排序: 是利用歸併的思想實現的排序方法,該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。 合

排序4----歸併排序詳細分析

歸併排序 1.兩個有序序列合併核心思想 對兩個有序的序列進行合併 不斷選兩組第一個,選中的數 ① 那組的指示器後移 ② 數放入新的序列 a[] = { 3,6 }; b[] = { 1,2 ,9 }; 2.兩個有序序列合併程式碼 void Merge

必須知道的八大種排序演算法【java實現 歸併排序演算法、堆排序演算法詳解

一、歸併排序演算法 基本思想:   歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。 歸併排序示例:   合併方法: 設r[i…n]由兩個有序子表r[i…m]和r[m+1…n]組

8大排序-----3選擇排序與時間複雜度

                                                     選擇排序與時間複雜度 (一)選擇排序的基本思想:選擇排序就是每一次從待排序的資料中選出最小的元素,放到已經排好序的資料的最後位                    

排序演算法1插入排序的演算法分析

導語 今天,我們介紹的是排序演算法經典的一種排序演算法,這個演算法是插入排序。 相信大家都玩過紙牌。插入排序的工作方式就像許多人排序一手撲克牌。 開始時,我們的左手為空並且桌子上的牌面朝下(意味著我們不在翻開之前並不知道下一張牌是多大的)