二路歸并排序的算法設計和復雜度分析and周記

數據結構實驗報告

實驗目的:

通過本次實驗,了解算法復雜度的分析方法,掌握遞歸算法時間復雜度的遞推計算過程。

實驗內容

二路歸并排序的算法設計和復雜度分析

實驗過程

1.算法設計

第一步,首先要將數組進行劃分,假設等待排序的數組是A[SIZE],我們每次從數組的中間開始劃分。

1).假設等待劃分的數組是A{high …low} (是A中的一小段),劃分點是它的中點,mid=(low+high)/2

2).如果數組段只剩下一個元素,比如A[5…5],劃分出來也是(5+5)/2=5,A[5…5]也是它本身。

3).如果數組段是奇數項。比如A[3…5],(3+5)/2=4,劃分為了A[3…4],A[5…5]

4).如果數組段是偶數段,比如A[2...5],(2+5)/2=3(因為是int),劃分為了A[2,3],A[4…5],均分

第二步,劃分必定是一遞歸的操作,因此設計一個類似于二叉樹遍歷的遞歸代碼。

1).函數名是mergeSort(A[],int low, int high),每次對A[low,high]進行劃分,劃分為A[low…mid],A[mid+1,high],然后再對這兩段數組進行遞歸的劃分。

2).劃分到單一元素的時候,進行合并操作

第三步,合并操作

2.程序清單

#include<stdio.h>
#include<malloc.h>
void disp(int a[],int n){int i;for(i=0;i<n;i++)printf("%d",a[i]);printf("\n");
}
void Merge(int a[],int low,int mid,int high){int * tmpa;int i=low,j=mid+1,k=0;tmpa=(int * )malloc((high-low+1)*sizeof(int));while (i<=mid&&j<=high)if(a[i]<=a[j]){tmpa[k]=a[i];i++;k++;}else{tmpa[k]=a[j];j++;k++;}while(i<=mid){tmpa[k]=a[i];i++;k++;}while(j<=high){tmpa[k]=a[j];j++;k++;}for(k=0,i=low;i<=high;k++,i++)a[i]=tmpa[k];free(tmpa);
}
void MergePass(int a[],int length,int n){int i;for(i=0;i+2*length-1<n;i=i+2*length)Merge(a,i,i+length-1,i+2*length-1);if(i+length-1<n)Merge(a,i,i+length-1,n-1);
}
void MergeSort(int a[],int low,int high){int mid;if(low<high){mid=(low+high)/2;MergeSort(a,low,mid);MergeSort(a,mid+1,high);Merge(a,low,mid,high);}
}
void main(){int n=10;int a[]={2,5,1,7,10,6,9,4,3,8};printf("排序前:");disp(a,n);MergeSort(a,0,9);printf("排序后:");disp(a,n);
}

3.運行結果

4.算法復雜度分析

數組段是偶數段,對于上述二路歸并排序算法,當有n個元素時需要[log2n]趟歸并,每一趟歸并,它的元素比較次數不超過n-1,元素移動次數都是n,因此二路歸并排序的時間復雜度O(nlog2n)

假設MergeSort(a,0,n-1)算法的執行時間為T(n),顯然,Merge(a,0,n/2,n-1)合并操作的執行時間為O(n),所以得到以下遞推公式

T(n)=1 ????????????????當n=1的時候

T(n)=2T(n/2)+O(n) ????當n>1的時候

容易得出 T(n)=O(nlog2n)。

實驗總結

在這次實驗中,我學到很多東西,加強了我的動手能力,并且培養了我的獨立思考能力。特別是在做實驗報告時,因為在做數據處理時出現很多問題,如果不解決的話,將會很難的繼續下去。還有動手這次實驗,使這門課的一些理論知識與實踐相結合, 更加深刻了我對算法設計與分析這門課的認識。


生活

寒假留校上半年還好,這學期開學就奇怪了,從家里來了之后就一直發燒,吃完退燒藥之后,消停了兩天,又發燒,直到學校正式開學,才消停,反反復復了十來天。罷了,總歸,又能活蹦亂跳了。

之前一直覺得自己性格特征不明顯,網上的東西很多都是刻板印象,直到玩得熟的朋友說我線上活潑還好說話,但線下很欠打,tm是個杠精,我才意識到,歐,好吧,不過還是不喜歡給自己貼標簽,因為畢竟,每個人都是獨一無二的。(?′?`?)

上次經歷了一些事情,朋友說那么愛問原因的你,怎么這回,不問問他原因呢?因為,我認為,無論是什么原因,如果后悔了,如果選擇的不是我,那就不屬于我,要么全部,要么全不,我永遠值得世界上最好的東西,是我的,誰也搶不走,不是我的,那我更不稀罕。或許,我的觀念有一天會改變,會意識到自己的狹隘,但目前為止,我尊重當下的自己。

?生活小滿勝萬全,現在 ,覺得,每天都無比絢麗多彩。24節氣快驚蟄了,為什么喜歡春天和夏天呢?因為它燦爛,明媚,熱烈。

上次跟同學聊天,偶然提到項目,他說

嘿嘿,誰得到夸夸和認可的時候不開心嘞 😎😎😎😎😎😎。

四級也過了,去年大英賽省二,今年的就不參加了,那就剩下,準備準備六級,還有藍橋杯了......


本來是想拍這個表情包的,

但是手機怎么放都不對,于是,畫風就變了,也很不錯了嘞

兩個突發奇想的小女孩兒( 3月1日傍晚?)


基本不追星,但是高中的時候就喜歡張新成飾演的黎語冰,現在看,還是很喜歡


嘿嘿,臭屁一下,世界上怎么會有我這么棒棒噠的人兒,天哪,又是喜歡自己的一天。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713810.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【網站項目】314學生二手書籍交易平臺

&#x1f64a;作者簡介&#xff1a;擁有多年開發工作經驗&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。&#x1f339;贈送計算機畢業設計600個選題excel文件&#xff0c;幫助大學選題。贈送開題報告模板&#xff…

關于游戲公司組織架構的小討論

過完年剛剛上班沒幾天&#xff0c;就有一件比較搞笑的事情&#xff0c;可以和大家分享一下。 ??某一天我們在公司的會議室開會&#xff0c;發現有非常多蚊子&#xff0c;于是找行政問能不能找專業人士來滅蚊。行政的答復是&#xff0c;專業滅蚊是有固定時間的&#xff0c;還要…

JVM相關面試題(2024大廠高頻面試題系列)

一、JVM的組成 1、JVM由哪些部分組成&#xff0c;運行流程是什么&#xff1f; 回答&#xff1a;在JVM中共有四大部分&#xff0c;分別是Class Loader&#xff08;類加載器&#xff09;、Runtime Data Area&#xff08;運行時數據區&#xff0c;內存分區&#xff09;、Execut…

MyBatis的補充用法

說明&#xff1a;之前介紹過MyBatis的用法&#xff0c;像 用注解和Mapper.xml操作數據庫、在Mapper.xml里寫動態SQL。最近在一次用MyBatis批量更新數據庫對象的場景中&#xff0c;意識到對MyBatis的一些標簽用法不太熟悉&#xff0c;所以去 MyBatis官網 看了一些文檔&#xff0…

php httpfs鏈接hdfs

一.代碼&#xff08;有bug&#xff09; GitHub - michaelbutler/php-WebHDFS: A PHP client for WebHDFS 二.調用代碼 1.代碼1.代碼 require_once(../webhdfs/src/org/apache/hadoop/WebHDFS.php);require_once(../webhdfs/src/org/apache/hadoop/tools/Curl.php); require_o…

什么是人才儲備?如何做人才儲備?

很多小伙伴都會有企業面試被拒的情況&#xff0c;然后HR會告訴你&#xff0c;雖然沒有錄用你&#xff0c;但是你進入了他們的人才儲備庫&#xff0c;那么這個儲備庫有什么作用和特點呢&#xff1f;我們如何應用人才測評系統完善人才儲備庫呢&#xff1f; 人才儲備一般有以下三…

Python打發無聊時光:12.用PyQt實現簡易的心電起搏器界面

第一步&#xff1a;裝PyQt庫 pip install PyQt5 第二步&#xff1a;復制代碼 import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QVBoxLayout,QWidget, QLabel, QProgressBar, QSlider, QLineEdit, QHBoxLayout) from PyQt5.QtCore import …

軟件分層(數據結構/軟件邏輯上分層+舉例),相連節點的概念+如何相連,為什么是層狀結構(軟件分層,網絡協議分層+梳理協議順序),協議分層(打電話例子)

目錄 軟件分層 介紹 舉例 類的繼承 虛擬文件系統 線程接口封裝 虛擬地址空間 總結 為什么是層狀的 軟件分層 網絡協議 原因 梳理協議順序 相連節點 協議分層 引入 示例 實際上 邏輯上 制定出協議 軟件分層 介紹 通過將軟件系統劃分為不同的層次,每一層都有…

uniApp 調整小程序 單個/全部界面橫屏展示效果

我們打開uni項目 小程序端運行 默認是豎著的一個效果 我們打開項目的 pages.json 給需要橫屏的界面 的 style 屬性 加上 "mp-weixin": {"pageOrientation": "landscape" }界面就橫屏了 如果是要所有界面都橫屏的話 就直接在pages.json 的 gl…

Ps:海綿工具

海綿工具 Sponge Tool可用于調整圖像中特定區域的飽和度&#xff0c;常用于增加或減少顏色的飽和度。 快捷鍵&#xff1a;O 在特別的灰度圖像上&#xff0c;則可用于調整對比度&#xff0c;這可以開發出更多的創意技巧。 ◆ ◆ ◆ 常用操作方法與技巧 1、海綿工具主要用于調整…

源碼解析篇 | YOLOv8官方源碼項目目錄結構解析

前言&#xff1a;Hello大家好&#xff0c;我是小哥談。YOLOv8是一種目標檢測算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列算法的第8個版本。YOLOv8相比于之前的版本&#xff0c;在檢測精度和速度上都有所提升&#xff0c;它在各種場景下都表現出色…

Git源碼管理

參考視頻&#xff1a;16-git的日志以及版本管理_嗶哩嗶哩_bilibili 參考博客&#xff1a;Git && Docker 學習筆記-CSDN博客 目錄 簡介 個人操作初始化 初始化git目錄 查看生成的git目錄文件 配置git工作目錄的用戶信息 查看工作區的狀態&#xff0c;生成文件的…

【JS】生成N位隨機數

作用 用于郵箱驗證碼 碼 ramNum.js /*** 生成N位隨機數字* param {Number} l 默認&#xff1a;6&#xff0c;默認生成6位隨機數字* returns 返回N位隨機數字*/ const ramNum (l 6) > {let num for (let i 0; i < l; i) {const n Math.random()const str String(n…

C++面試干貨---帶你梳理常考的面試題(一)

顧得泉&#xff1a;個人主頁 個人專欄&#xff1a;《Linux操作系統》 《C從入門到精通》 《LeedCode刷題》 鍵盤敲爛&#xff0c;年薪百萬&#xff01; 1.C和C的區別 1.語法和特性&#xff1a;C是一種過程式編程語言&#xff0c;而C是一種面向對象編程語言。C在C的基礎上增加…

Java智慧云HIS醫院信息化系統源碼 更具靈活性、擴展性

目錄 什么是云HIS 趨勢與轉變 HIS上云后有哪些好處 解決方案 云HIS組成 1、門診掛號 2、住院管理 3、電子病歷 4、藥物管理 5、統計報表 6、綜合維護 7、運營運維 什么是云HIS 云HIS是一種基于云計算技術的醫院信息管理系統。云HIS可以幫助醫院管理各類醫院信息&a…

CIE-Alevel-Physics分類真題下載(更新中)

鏈接真題歸類年份https://www.savemyexams.com/https://gceguide.com/papershttps://pastpapers.papacambridge.com/https://rocketrevise.comhttps://www.exam-mate.com/markhint.inhttps://xtremepape.rs/threads/as-and-a-level-physics-topical-pastpapers-upto-2015-with-…

Java Linux基本命令面試題

Java Linux基本命令面試題 前言1、查看文件內容有哪些命令可以使用&#xff1f;2、終端是哪個文件夾下的哪個文件&#xff1f;黑洞文件是哪個文件夾下的哪個命令&#xff1f;3、用什么命令對一個文件的內容進行統計&#xff1f;(行號、單詞數、字節數)4、怎么使一個命令在后臺運…

每日OJ題_分治歸并②_力扣LCR 170. 交易逆序對的總數

目錄 力扣LCR 170. 交易逆序對的總數 解析代碼1 解析代碼2 力扣LCR 170. 交易逆序對的總數 LCR 170. 交易逆序對的總數 難度 困難 在股票交易中&#xff0c;如果前一天的股價高于后一天的股價&#xff0c;則可以認為存在一個「交易逆序對」。請設計一個程序&#xff0c;輸…

Linux系統中安裝redis+redis后臺啟動+常見相關配置

1、下載Redis Redis官網&#xff1a;https://redis.io/ 歷史版本&#xff1a; http://download.redis.io/releases 2、連接Linux&#xff08;或者VMwear&#xff09; 我們安裝的是linux版本的redis 打開xftp我們需要先將我們的Redis上傳到服務器上 解壓到這里 解壓的指令 …

創建型模式之建造者模式

一、概述 1、建造者模式&#xff1a;將一個復雜對象的構建和它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示 2、將客戶端與包含多個部件的復雜對象的創建過程分離&#xff0c;客戶端無須知道復雜對象的內部組成部分與裝配方式&#xff0c;只需要知道所需建造…