91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么實現歸并排序算法

發布時間:2021-04-14 10:51:15 來源:億速云 閱讀:177 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關C++怎么實現歸并排序算法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

歸并

歸并排序(MERGE-SORT)是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為二路歸并。

算法描述

歸并操作的工作原理如下:

1、申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列
2、設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
3、比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置
4、重復步驟3直到某一指針超出序列尾
5、將另一序列剩下的所有元素直接復制到合并序列尾

圖示

C++怎么實現歸并排序算法

C++代碼

#include <iostream>

using namespace std;

//比較相鄰序列
void Merge(int arr[],int temp[],int start,int mid,int end){
  int i = start,j = mid + 1,k = start;
  //將較小值放入申請序列
  while(i != mid+1 && j != end+1){
    if(arr[i] > arr[j])
      temp[k++] = arr[j++];
    else
      temp[k++] = arr[i++];
  }
 
 //將多余的數放到序列末尾
  while(i != mid+1)
    temp[k++] = arr[i++];

  while(j != end+1)
    temp[k++] = arr[j++];

 //更新序列
  for(i = start;i <= end;i++)
    arr[i] = temp[i];
}

void MergeSort(int arr[],int temp[],int start,int end){
  int mid;
  if(start < end){
   //避免堆棧溢出
    mid = start + (end - start) / 2;
    //遞歸調用
    MergeSort(arr,temp,start,mid);
    MergeSort(arr,temp,mid+1,end);
    Merge(arr,temp,start,mid,end);
  }
}

int main(){
  int a[8] = {50, 10, 20, 30, 70, 40, 80, 60};
  int i, b[8];
  MergeSort(a, b, 0, 7);
  for(i=0; i<8; i++)
    cout<<a[i]<<" ";

  return 0;
}

關于“C++怎么實現歸并排序算法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

濮阳县| 荃湾区| 芒康县| 宜章县| 察哈| 阿拉善盟| 龙岩市| 射洪县| 色达县| 清原| 裕民县| 南投市| 丹巴县| 分宜县| 通州区| 衡阳市| 玉树县| 巢湖市| 永川市| 疏勒县| 黔南| 乌海市| 耒阳市| 兴义市| 永平县| 黄大仙区| 琼中| 乌兰县| 色达县| 辉县市| 阳信县| 沂水县| 开原市| 城步| 古丈县| 华容县| 繁昌县| 长岭县| 昌图县| 华宁县| 呼伦贝尔市|