【原始碼】嚴蔚敏資料結構演算法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 一元
【12】python 棧型資料結構模擬、佇列型資料結構模擬
一、壓棧操作模擬 #__author:"吉*佳" #date: 2018/10/21 0021 #function:棧 # 棧:即是先進後出的一種資料結構 # (1)模擬壓棧操作 stack=[] flag=True while flag: temp = input("請輸入壓棧元素[
【ES6】Set和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底下的方法,可以將數據