最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Java歸并排序怎么實(shí)現(xiàn)

本篇內(nèi)容介紹了“Java歸并排序怎么實(shí)現(xiàn)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司于2013年開(kāi)始,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元河北做網(wǎng)站,已為上家服務(wù),為河北各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):13518219792

歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。NlogN 由于需要兩兩比較 因此也是穩(wěn)定的!

首先考慮下如何將將二個(gè)有序數(shù)列合并。這個(gè)非常簡(jiǎn)單,只要從比較二個(gè)數(shù)列的第一個(gè)數(shù),誰(shuí)小就先取誰(shuí),取了后就在對(duì)應(yīng)數(shù)列中刪除這個(gè)數(shù)。然后再進(jìn)行比較,如果有數(shù)列為空,那直接將另一個(gè)數(shù)列的數(shù)據(jù)依次取出即可。

//將有序數(shù)組a[]和b[]合并到c[]中  
void MemeryArray(int a[], int n, int b[], int m, int c[])  
{  
    int i, j, k;  
    i = j = k = 0;  
    while (i < n && j < m)  
    {  
        if (a[i] < b[j])  
            c[k++] = a[i++];  
        else  
            c[k++] = b[j++];   
    }  
    while (i < n)  
        c[k++] = a[i++];  
  
    while (j < m)  
        c[k++] = b[j++];  
}

可以看出合并有序數(shù)列的效率是比較高的,可以達(dá)到O(n)。

解決了上面的合并有序數(shù)列問(wèn)題,再來(lái)看歸并排序,其的基本思路就是將數(shù)組分成二組A,B,如果這二組組內(nèi)的數(shù)據(jù)都是有序的,那么就可以很方便的將這二組數(shù)據(jù)進(jìn)行排序。如何讓這二組組內(nèi)數(shù)據(jù)有序了?

可以將A,B組各自再分成二組。依次類(lèi)推,當(dāng)分出來(lái)的小組只有一個(gè)數(shù)據(jù)時(shí),可以認(rèn)為這個(gè)小組組內(nèi)已經(jīng)達(dá)到了有序,然后再合并相鄰的二個(gè)小組就可以了。這樣通過(guò)先遞歸的分解數(shù)列,再合并數(shù)列就完成了歸并排序。

歸并排序的效率是比較高的,設(shè)數(shù)列長(zhǎng)為N,將數(shù)列分開(kāi)成小數(shù)列一共要logN步,每步都是一個(gè)合并有序數(shù)列的過(guò)程,時(shí)間復(fù)雜度可以記為O(N),故一共為O(N*logN)。因?yàn)闅w并排序每次都是在相鄰的數(shù)據(jù)中進(jìn)行操作,所以歸并排序在O(N*logN)的幾種排序方法(快速排序,歸并排序,希爾排序,堆排序)也是效率比較高的。

#include 
#include 
//將二個(gè)有序數(shù)列a[first...mid]和a[mid+1...last]合并。
void MerageArr(int a[], int first, int mid, int last, int temp[])
{
    int i = first, j = mid + 1;
    int k = 0;
    while (i <= mid && j <= last)
    {
        if (a[i] <= a[j])
        {
            temp[k++] = a[i++];
        }
        else
        {
            temp[k++] = a[j++];
        }
    }
    while (i <= mid)
    {
        temp[k++] = a[i++];
    }
    while (j <= last)
    {
        temp[k++] = a[j++];
    }
    for (i = 0; i < k; i++)
    {
        a[first + i] = temp[i];
    }

}
void MSort(int a[], int first, int last, int temp[])
{
    if (first < last)
    {
        int mid = (first + last) / 2;
        MSort(a, first, mid, temp);    //左邊有序
        MSort(a, mid + 1, last, temp); //右邊有序
        MerageArr(a, first, mid, last, temp); //再將二個(gè)有序數(shù)列合并
    }
}
bool MergeSort(int a[], int n)
{
    int *temp = new int[n];
    assert(temp!=NULL);
    MSort(a, 0, n - 1, temp);
    delete [] temp;
    return true;
}
int main()
{
    int a[] = {5,4,3,2,1};
    MergeSort(a,5);
    for(int i=0;i<5;i++)
    {
        cout<
用遞歸無(wú)非就是將一個(gè)大數(shù)組一半一半的分  然后再逆序 組合起來(lái)!   我們可以直接從最底層的一個(gè)一個(gè)的組合來(lái)組正一個(gè)大數(shù)組
#include
using namespace std;
void merageArr(int a[],int first, int mid, int last,int tempArr[])
{
    int i=first;
    int j=mid+1;
    int k=0;
    while(i<=mid && j<=last)
    {
        if(a[i]n-1)
            {
                 high=n-1;
            }
            merageArr(a,low,mid,high,tempArr);
            low=high+1;
        }
    }
    delete []tempArr;
}
int main()
{
    int a[5]={5,4,3,2,1};
    MerageSort(a, 5);
    for(int i=0;i<5;i++)
        cout<

“Java歸并排序怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


新聞名稱(chēng):Java歸并排序怎么實(shí)現(xiàn)
標(biāo)題來(lái)源:http://fisionsoft.com.cn/article/phdccp.html