八大排序演算法 之 歸併排序

2021-07-11 15:55:29 字數 1000 閱讀 1668

排序思想:

如圖所示:

排序趟數:

如果2^n

如此例,length = 9 > 8,趟數是4.

排序原理:

1,第一趟將相鄰兩個數歸併成乙個有序的小組合;

2,第二趟將相鄰兩個有序小組合歸併成乙個更大的的有序組合;

3,依次類推,直到將所有數歸併成乙個最大的組合;

具體**實現如下:

//歸併排序主方法

public static void mergesort(int array)else if (list2.size() < gap)

if ((list1.size() == gap && list2.size() == gap) || (list1.size() == gap && list2.size() < gap && i == array.length - 1))

}//將已達到目的的第三個list裡的數複製到陣列裡,完成一趟排序;

for (int i = 0; i < array.length; i++)

list3.clear();

} }

//將兩個有序的陣列歸併成乙個有序的陣列的方法:傳入list1,list2,最後得到list3

public static void merger(arraylistlist1, arraylistlist2, arraylistlist3)

while(m < list1.size() && n < list2.size() && list1.get(m) >= list2.get(n))

} while (m < list1.size())

while (n < list2.size())

}

八大排序演算法之歸併排序

介紹到這裡只剩下歸併排序和基數排序沒有介紹過了。這兩種演算法各有各的特點,歸併排序是分治法的一種有效應用,所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。而基數排序又稱為桶排序,是唯一一種不需要元素之間相互比較就可以排好序的排序演算法。一 歸併排序 1.基本思想 這裡介紹的歸併排序是非遞迴版...

八大排序演算法之歸併排序

歸併排序的核心是,每次將兩個有序陣列組合成為乙個新的有序陣列。對於倆個有序陣列 def merge a list,b list list l a,l b len a len b res 0 for i in range l a l b index 0 i,j 0,0 while i歸併排序中,兩個有...

八大排序演算法之歸併排序

說明 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2 路歸併。思路 1.將序列中待排序數字分...