分治法排序

2021-06-18 12:52:34 字數 827 閱讀 3990

分治法排序:

1、把大問題分為小問題

2、求每個小問題的解

3、和1反方向,把各個解合併起來

實現:1、啟用兩個快取,乙個放前半部份問題,乙個放後半部份問題

2、只用乙個大快取,用index的大小區分問題規模

#include

#include

void megre_pre(int *pre,int first, int mid, int last)

for (j=0;j<=last-mid-1;j++) //後半部份長度,求差值得到

else

}while(i<=(mid-first))

while(j<=(last-mid-1))

free(left);

free(right);

}void mergeweb(int *a,int p, int q,int r)

else

k++;

}while(i <= q)

while(j <= r)

for (i = 0; i < k; i++)

free(tmp);

}void  merge_sort(int *pre,int first,int last)

}int main()

printf("sorted before:\n");

for (i=0; i<=10; i++)

merge_sort(pre_arr,0,10);

printf("\n sorted after:\n");

for (i=0; i<=10; i++)

return 0;

}

分治法排序

include include define temp 10 int a temp int b temp void merge int low,int mid,int high else k while i mid while j high for i 0 i k i b low i a i int...

分治法 排序

今天在用lua對一組資料進行排序,想起來很久沒有寫過演算法了,工作中對於資料進行排序時都是使用stl裡面的函式,比如sort,qsort這些函式。忽然興致勃勃的想寫乙個演算法,表示自己沒有完全忘記演算法內容,所以選了乙個比較簡單的排序功能 分治法排序 1.分治 把元問題分割成相同的子問題,這步其實就...

分治法排序

分治排序法的思想 簡單引入兩副已排好序的撲克牌,假設最上面的最小。則只需每次比較兩副牌的最上面那一張的大小,永遠取最小的,直到取完兩副牌為止。為了方便,在兩副牌的最後加入一張哨兵牌,值取為 include define inf 100000 using namespace std 合併 void m...