1. 程式人生 > >【原始碼】嚴蔚敏資料結構演算法C++(十八)排序——歸併排序

【原始碼】嚴蔚敏資料結構演算法C++(十八)排序——歸併排序

日常說明:有錯誤歡迎大家指正。另外本部落格所有的程式碼博主編寫後均除錯通過。重要提醒!!!!博主使用的是VS2017,如果有低版本的小夥伴最好新建空專案將此程式碼複製上去。
更多演算法請關注我的演算法專欄https://blog.csdn.net/column/details/20417.html
有朋友反映讓我多加備註,我覺得除非特別驚豔的方法需要說明外,這些基本的方法是容易明白的,當然前提是先搞懂演算法的基本思想,希望對你們有用。

執行結果
MergeSort.h

#pragma once
#include<iostream>
using namespace std;


class MergeSort
{
public
: MergeSort(); void Merge(int arr[], int low, int mid, int high,int temp[]); void MergeSplit(int arr[], int low, int high,int temp[]); void Merge_sort(int arr[], int high,int temp[]); };

MergeSort.cpp

#include "MergeSort.h"


MergeSort::MergeSort()
{
    return;
}

void MergeSort::Merge(int
arr[],int low,int mid,int high,int temp[]) { int k = 0; int i = low; int j = mid + 1; while (i<=mid&&j<=high) { if (arr[i]<=arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } while
(i<=mid) { temp[k++] = arr[i++]; } while (j<=high) { temp[k++] = arr[j++]; } for (int m = low,n =0; m <= high; m++,n++) { arr[m] = temp[n]; } } void MergeSort::MergeSplit(int arr[],int low,int high,int temp[]) { int mid = (low + high) / 2; if (low<high) { MergeSplit(arr, low, mid,temp); MergeSplit(arr, mid + 1, high,temp); Merge(arr, low, mid, high,temp); } } void MergeSort::Merge_sort(int arr[],int high,int temp[]) { MergeSplit(arr,0,high,temp); } int main() { MergeSort MSort; int length; cout << "請輸入陣列元素個數:"; cin >> length; int *temp = new int[length]; int *values = new int[length]; cout << "請輸入資料元素:"; for (int i = 0; i < length; i++) { cin >> values[i]; } cout << endl; cout << "歸併排序後:"; MSort.Merge_sort(values, length - 1,temp); for (int n = 0; n <length; n++) { cout << values[n]<<" "; } free(temp); return 0; }

相關推薦

原始碼資料結構演算法C++排序——歸併排序

日常說明:有錯誤歡迎大家指正。另外本部落格所有的程式碼博主編寫後均除錯通過。重要提醒!!!!博主使用的是VS2017,如果有低版本的小夥伴最好新建空專案將此程式碼複製上去。 更多演算法請關注我的演算法

原始碼C++實現資料結構所有演算法線性表-順序表

日常說明:首先博主也是菜鳥一枚,有錯誤歡迎大家指正。另外本部落格所有的程式碼博主編寫後均除錯 通過。重要提醒!!!!博主使用的是VS2017,如果有低版本的小夥伴 最好新建空專案將此程式碼複製上去。 附加說明:最初的程式碼我沒有嚴格的按照專案規範來分離,希望

資料結構原始碼及習題解析

⭐ 我的網站: www.mengyingjie.com ⭐ 嚴蔚敏資料結構原始碼及習題解析 習題解析未更新完整,以後更新 內容已上傳到github,歡迎star和fork: https://github.com/MengYingjie/YanWeimin-DataStructure-SourceCode

-資料結構-樹的遍歷

前序非遞迴遍歷 PreOrderTraverse(BiTree T) { InitStack(S); p=T; while (p||!StackEmpty) { if(p) { print(p); if(p->rchild) {

-資料結構-時間複雜度

T(n)=O(f(n))表示隨著問題規模n增大,演算法的增長率和f(n)的增長率一樣大。反應是是一種增長趨勢。 這裡的big o是cs中的一種表示方法,和高數裡的上界下界函式不是一個東西 需要記住的是: 增長率是分正負的 對數函式<冪函式<指數函式<n

資料結構C語言實現棧的基本操作

int main(){   SqStack S;   SElemType *e;   int n,i;   InitStack(&S);   printf("請輸入需要入棧的資料個數\n");   scanf("%d",&n);   for(i=0;i<n;i++)   {    sca

資料結構C語言 銀行排隊佇列 離散事件模擬

系統每次隨機生成的是1)當前顧客顧客的櫃檯被服務時間2)當前顧客和下一個顧客到達的間隔時間,記住這2點就理解了整個程式碼,書裡說得不太清楚。每個顧客在銀行的等待時間取決於佇列裡前一個節點的離開時間,而不是自己的到達時間+服務時間。 程式碼設定了EventList這個事件連

資料結構 二叉樹鏈式儲存結構 遍歷等操作

課本 《資料結構(C語言版)(第2版)》 嚴蔚敏版 樹結構的學習。 編譯環境:DEV C++ 檔案格式為 cpp(c++檔案型別),前者的引用函式,在 C 的情況下沒完成。 實現: 二叉樹的先序遍歷

原始碼四階龍格庫塔法Runge Kutta求解常微分方程

MATLAB完整原始碼: % It calculates ODE using Runge-Kutta 4th order method % Author Ido Schwartz clc; % Clears the screen clear all; h

資料結構 JAVA描述 動態查詢 B-樹 B+樹 紅黑樹

B-樹 前面介紹的查詢演算法都在記憶體中進行的,它們適合用於較小的檔案,而對於較大的、存放在外存的檔案就不合適,對於此類較大規模的檔案,即使是採用了平衡二叉樹,在查詢效率上仍然較低。例如若將存放在外存的10億條記錄組織為平衡二叉樹,則每次訪問記錄需要進行約30

Java資料結構詳解- HashMap

HashMap 基於雜湊表的 Map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。(除了非同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證對映的順序,特別是它不保證該順序恆

C++及資料結構複習筆記向量

第二章 C++資料結構        本章主要介紹了C++基本的資料結構,包括向量、列表、棧與佇列、二叉樹和圖。主要的總結均來自於鄧俊輝老師的《資料結構C++語言版》,在每一小節的背後,給出了一些在網上總結的面試題,以加強我們對C++資料結構的理解。並且每一小節均給出了典型的

資料結構 JAVA描述 歸併排序 鏈式基數排序

歸併排序 /** * @description 2-路歸併排序演算法 歸併過程中引入陣列temp[],第一趟由a歸併到temp,第二趟由temp歸併到a,如此反覆直到n個記錄為一個有序表 * 返回的是

資料結構演算法實現 目錄

資料結構演算法實現(嚴蔚敏版配套實現程式)目錄: 第1章 緒論1.1 什麼是資料結構1.2 基本概念和術語1.3 抽象資料型別的表現與實現1.4 演算法和演算法分析第2章 線性表2.1 線性表的型別定義2.2 線性表的順序表示和實現2.3 線性表的鏈式表示和實現2.4 一元

12python 棧型資料結構模擬、佇列型資料結構模擬

一、壓棧操作模擬 #__author:"吉*佳" #date: 2018/10/21 0021 #function:棧 # 棧:即是先進後出的一種資料結構 # (1)模擬壓棧操作 stack=[] flag=True while flag: temp = input("請輸入壓棧元素[

ES6Set和Map資料結構

Set 1 類似於陣列,但成員的值都是唯一的 2 初始化: let set=new Set(); let set1=new Set([1,2,3,4,4]); //去除陣列重複成員: [...new Set(array)] 3 向set加入值時不會發

D3.js資料視覺化系列教程--組合新增刪除

//鍵值對資料集 var dataset = [ {key:0,value:5}, {key:1,value:10}, {key:2,value:13}, {key:3,value:19}, {key:4,value:21}, {key:5,value:25}, {key:6,value:22}, {ke

Java基本類型和引用類型值傳遞

適合 and span print pri right bre enc this 【關鍵詞】 【問題】 · 加深對基本類型和引用類型的理解; 【效果圖】 【分析】 參見最後的【參考資料】 【解決方式】 【代碼】 public

JMeter學習JMeter測試Java

sets interval permsize int 文件 不同 時間 結果 argument 實例: 服務為:將輸入的兩個參數通過IO存入文件; 1、打開MyEclipse,編寫Java代碼 服務: package test; import java.io.F

PANDAS 數據合並與重塑concat篇

分享 levels 不同的 整理 con 簡單 post ignore num 轉自:http://blog.csdn.net/stevenkwong/article/details/52528616 1 concat concat函數是在pandas底下的方法,可以將數據