Sebuah penjelasan rinci dan analisis bottom - up mergesort muncul dalam sebuah laporan oleh Goldstine dan Neumann pada awal 1948.
Algorithm
Menggabungkan semacam animasi . Unsur-unsur diurutkan diwakili oleh titik .Secara konseptual , merge semacam bekerja sebagai berikut :
- Bagilah daftar disortir ke n sublists , masing-masing berisi 1 elemen ( daftar 1 elemen dianggap diurutkan ).
- berulang menggabungkan sublists untuk menghasilkan sublists diurutkan baru sampai hanya ada 1 sublist tersisa . Ini akan menjadi daftar diurutkan .Implementasi top -downContoh C seperti kode menggunakan indeks untuk top down algoritma merge sort secara rekursif membagi daftar ( disebut berjalan dalam contoh ini ) ke dalam sublists sampai ukuran sublist adalah 1 , kemudian menggabungkan mereka sublists untuk menghasilkan daftar diurutkan .
{
if(iEnd - iBegin < 2) // if run size == 1
return; // consider it sorted
// recursively split runs into two halves until run size == 1,
// then merge them and return back up the call chain iMiddle = (iEnd + iBegin) / 2; // iMiddle = mid point TopDownSplitMerge(A, iBegin, iMiddle, B); // split / merge left half TopDownSplitMerge(A, iMiddle, iEnd, B); // split / merge right half TopDownMerge(A, iBegin, iMiddle, iEnd, B); // merge the two half runs CopyArray(B, iBegin, iEnd, A); // copy the merged runs back to A}// left half is A[iBegin :iMiddle-1]// right half is A[iMiddle:iEnd-1 ]TopDownMerge(A[], iBegin, iMiddle, iEnd, B[]){ i0 = iBegin, i1 = iMiddle; // While there are elements in the left or right runs for (j = iBegin; j < iEnd; j++) { // If left run head exists and is <= existing right run head. if (i0 < iMiddle && (i1 >= iEnd || A[i0] <= A[i1])) B[j] = A[i0]; i0 = i0 + 1; else B[j] = A[i1]; i1 = i1 + 1; }}CopyArray(B[], iBegin, iEnd, A[]){ for(k = iBegin; k < iEnd; k++)
A[k] = B[k];}Itulah sedikit informasi semoga bermanfaat
source = http://en.wikipedia.org/wiki/Merge_sort