;//乙個臨時陣列
intmin
(int x,
int y)
void
merge
(int a,
int s,
int m,
int e,
int b)
//只要有乙個陣列的數全部都排完了,那麼我就可以吧另乙個陣列剩下的全部數就都放在臨時陣列裡了
while
(x1 <=m)
b[x++
]= a[x1++];
while
(x2<=e)
b[x++
]= a[x2++];
for(i=
0;i1;i++
)//這裡e-s+1是因為e是從len-1開始的,所以+1
a[s+i]
= b[i]
;//把b中已經排好的陣列重新賦值給a
}void
mergesort
(int a,
int s,
int e,
int b)
//乙個引數是要排序的陣列,另乙個是陣列的開始,結尾,b臨時存放
}//寫乙個演義的函式
void
display
(int a,
int s,
int e)
intmain()
結果如圖所示:
從**中我們可以看出,我們使用了遞迴的思想完成了歸併排序的操作,其中比較重要的倆格步驟,就是「分(mergesort)」和「和(merge)」倆個函式
在mergesort函式中:
void
mergesort
(int a,
int s,
int e,
int b)
//乙個引數是要排序的陣列,另乙個是陣列的開始,結尾,b臨時存放
}
主要是進行了分半的操作,通過二分的過程,把乙個大的陣列變成乙個個小的區域性的陣列,然後再通過merge函式,分別對每一小片的陣列再次整理組合在了一起.
void
merge
(int a,
int s,
int m,
int e,
int b)
//只要有乙個陣列的數全部都排完了,那麼我就可以吧另乙個陣列剩下的全部數就都放在臨時陣列裡了
while
(x1 <=m)
b[x++
]= a[x1++];
while
(x2<=e)
b[x++
]= a[x2++];
for(i=
0;i1;i++
)//這裡e-s+1是因為e是從len-1開始的,所以+1
a[s+i]
= b[i]
;//把b中已經排好的陣列重新賦值給a
此處出處:五分鐘學演算法
//quicksort
#include
#define buf_size 10
void
display
(int array,
int maxlen)
printf
("\n");
}void
swap
(int
*a,int
*b)// the implementation of quicksort
void
quicksort
(int array,
int begin,
int end)
//此時就已經處理完成了陣列,
//進行k左右倆邊陣列的分別排序
quicksort
(array,begin,i-1)
;quicksort
(array,i+
1,end);}
main()
;int maxlen = buf_size;
printf
("排序前的陣列:\n");
display
(array,maxlen)
;quicksort
(array,
0,maxlen-1)
;// 快速排序
printf
("排序後的陣列:\n");
display
(array,maxlen)
;}
結果如圖所示:
在給出的快排**中,我是讓a[0]先作為k,然後開始比較。
**解讀:
void
quicksort
(int array,
int begin,
int end)
//此時就已經處理完成了陣列,
//進行k左右倆邊陣列的分別排序
quicksort
(array,begin,i-1)
;quicksort
(array,i+
1,end)
;}
演算法02 分治
分治,就是 分而治之 就是把乙個複雜的問題分成兩個或更多的相同或相似的子問題,直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。分治法常常跟遞迴一起使用,借助遞迴,我們可以方便地將問題分解再將結果合併。分解 將原問題分解為若干個規模較小,相互獨立,與原問題形式相同的子問題 遞迴 若子問...
演算法複習筆記(三)分治法
演算法複習筆記 三 分治法 分治法劃分對策 子問題與原問題相比 問題性質一致,問題規模不同 求解一般分為三個階段 1.劃分 直到問題足夠小可以直接求解為止 2.求解 3.合併 將子問題的解合併為乙個更大規模的問題的解,自底向上逐步求出原問題的解。我們給出下面這個理智引入分治技術 不是所有的分治法都比...
作業5 分治演算法之最近對問題
最近對問題 令p為笛卡爾平面上n 1個點構成的集合。簡單起見,假設集合中每個點都不一樣。我們還假設這些點是按照其x周座標公升序排列的。為了更加方便,我們還按照點的y軸座標在另乙個列表中進行公升序排列,分別記為px,py。當2 n 3時,通過蠻力求解出d。當n 3時,可以利用點集在方向上的中位數mid...