c語言實現歸併算法,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語言的歸併算法?

輸入參數中,需要排序的數組為array[],起始索引為first,終止索引為last。調用完成後,array[]中從first到last處於升序排列。

void MergeSort(int array[], int first, int last)

{

int mid = 0;

if(firstlast)

{

mid = (first+last)/2;

MergeSort(array, first, mid);

MergeSort(array, mid+1,last);

Merge(array,first,mid,last);

}

}

高分送!!如何用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語言編一個歸併排序的程序

#include “MergeSort.h”

#include iostream

using namespace std;

MergeSort::MergeSort(vectorint _list, int _len)

{

list.push_back(0);

link.push_back(0);

for (int i=0; i_len; i++) {

list.push_back(_list[i]);

link.push_back(0);

}

this-len = _len;

}

//9 歸併排序:遞歸———————————————————–

//具體方法:以merger_link[]提供鏈表功能。merger_link[i]對應在有序子序列中

//merger_list[i]後一個結點在原merger_list[]中的下標;

//merger_link[0]總是表示有序子序列開始的結點在merge_list[]中的下標;

//st1,st2為兩個有序序列的第一個結點;

//將他們歸併,並返回其第一個結點的下標,即merger_link[0]

int MergeSort::list_merge(int st1, int st2)

{

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

while (i j) //當兩序列未檢測完

if (list[i] = list[j]) //將merge_list[i]和merge_list[j]

{ //中小的連接到merger_link[k]後

link[k] = i;

k = i;

i = link[i];

}else

{

link[k] = j;

k = j;

j = link[j];

}

if (!i) link[k] = j; //將剩餘未檢測完的merge_list[]

else link[k] = i; //連接到merger_link[k]後

return link[0];

}

int MergeSort::merge_sort(int left, int right)

{

if (left=right) return left;

int middle = (left + right)/2;

//對左右兩子序列進行歸併

return list_merge(merge_sort(left,middle), merge_sort(middle+1,right));

}

void MergeSort::out()

{

int i = link[0];

int j = 0;

while (i)

{

j++;

cout list[i] ” “;

i = link[i];

if (j%18 == 0) cout endl;

}

cout endl;

}

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QAJLN的頭像QAJLN
上一篇 2025-01-07 09:43
下一篇 2025-01-07 09:43

相關推薦

  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python實現爬樓梯算法

    本文介紹使用Python實現爬樓梯算法,該算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

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

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

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

    編程 2025-04-29
  • Harris角點檢測算法原理與實現

    本文將從多個方面對Harris角點檢測算法進行詳細的闡述,包括算法原理、實現步驟、代碼實現等。 一、Harris角點檢測算法原理 Harris角點檢測算法是一種經典的計算機視覺算法…

    編程 2025-04-29
  • 數據結構與算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序算法、字符串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

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

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

    編程 2025-04-29
  • 瘦臉算法 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

發表回復

登錄後才能評論