c語言歸併教學,歸併排序c語言詳解

本文目錄一覽:

c語言裏面,歸併操作怎麼歸併兩個子序列?

歸併排序是在多個已經同向排序的序列上進行的,例如:

A數組{2,6}和B數組{5,9}

首先提取兩個數組的首元素比較2和5,發現25,所以從A數組取走2放入新建的C數組,此時A數組中的元素成了{6},然後再次提取兩個數組的首元素比較6和5,發現56,於是,從B數組取走5放入C數組,此時A數組是{6},B數組是{9},C數組是{2,5},同理比較提取下去,直到A數組或者B數組為空,此時把非空數組的元素依次複製到C數組中即完成排序。

c語言歸併排序

直接上源碼,僅供參考:

#includestdio.h

// 一個遞歸函數

void mergesort(int *num,int start,int end);

// 這個函數用來將兩個排好序的數組進行合併

void merge(int *num,int start,int middle,int end);

int main()

{

// 測試數組

int num[10]= {12,54,23,67,86,45,97,32,14,65};

int i;

// 排序之前

printf(“Before sorting:\n”);

for (i=0; i10; i++)

{

printf(“%3d”,num[i]);

}

printf(“\n”);

// 進行合併排序

mergesort(num,0,9);

printf(“After sorting:\n”);

// 排序之後

for (i=0; i10; i++)

{

printf(“%3d”,num[i]);

}

printf(“\n”);

return 0;

}

//這個函數用來將問題細分

void mergesort(int *num,int start,int end)

{

int middle;

if(startend)

{

middle=(start+end)/2;

// 歸併的基本思想

// 排左邊

mergesort(num,start,middle);

// 排右邊

mergesort(num,middle+1,end);

// 合併

merge(num,start,middle,end);

}

}

//這個函數用於將兩個已排好序的子序列合併

void merge(int *num,int start,int middle,int end)

{

int n1=middle-start+1;

int n2=end-middle;

// 動態分配內存,聲明兩個數組容納左右兩邊的數組

int *L=new int[n1+1];

int *R=new int[n2+1];

int i,j=0,k;

//將新建的兩個數組賦值

for (i=0; in1; i++)

{

*(L+i)=*(num+start+i);

}

// 哨兵元素

*(L+n1)=1000000;

for (i=0; in2; i++)

{

*(R+i)=*(num+middle+i+1);

}

*(R+n2)=1000000;

i=0;

// 進行合併

for (k=start; k=end; k++)

{

if(L[i]=R[j])

{

num[k]=L[i];

i++;

}

else

{

num[k]=R[j];

j++;

}

}

delete [] L;

delete [] R;

}

c語言的歸併排序

、歸併簡單點說就是2分法 一直除以2 然後把從0到N/2的下標 , 和 N/2+1 到N的地址傳送到合併函數裏面,遞歸調用

高分送!!如何用C語言實現歸併排序算法!!!

#include iostream

using namespace std;

void merge(int array[],int left,int right)

{

int temparray[right];

for(int j=left;j=right;j++)

{

temparray[j]=array[j];

}

int middle=(left+right)/2;

int index1=left;

int index2=middle+1;

int i=left;

while((index1=middle)(index2=right))

{

if(temparray[index1]temparray[index2]) array[i++]=temparray[index1++];

else array[i++]=temparray[index2++];

}

while(index1=middle) array[i++]=temparray[index1++];

while(index2=right) array[i++]=temparray[index2++];

}

void sort(int array[],int left,int right)

{

if(leftright)

{

int middle=(left+right)/2;

sort(array,left,middle);

sort(array,middle+1,right);

merge(array,left,right);

}

}

這個不是特別的完美,但是大體上就是這麼個思路啦~而且因為語法不嚴謹,貌似只能在c++下運行~建議看看youku上的數據結構課,然後你就會發現全明白了~

如果在c語言下運行,int temparray[right];這句話裏面的right要改成你需要用的數~

如何用c語言實現兩個單鏈表的歸併

函數名、變量名出現了一些C語言的關鍵字,這是不允許的(比如將union作為函數名)

C語言 簡單的歸併問題

描述:這個問題是個類似於歸併排序的問題,相當簡單,只需每次將表中較小的元素提取出來,直至兩表都為空為止,組成的新表即為所求。

核心代碼(處理一組數據):

void fun(int a[],int b[],int n,int m){

/*數據存放在數組c中*/

int i=0,j=0,k=0;

for (k=0;kn+m;k++){

if(i=n||a[i]b[j]) {c[k]=b[j];j++;continue;}

if(j=m||a[i]b[j]) {c[k]=a[i];i++;continue;}

}

}

/*請注意檢查語法錯誤,不過出現的幾率性很小*/

原創文章,作者:GMRK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/131028.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GMRK的頭像GMRK
上一篇 2024-10-03 23:42
下一篇 2024-10-03 23:42

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論