伪代码的实现:
思路:
将要排序的数拆分成单个数字(单个数字视为有序的),然后比较两个的大小,来排序成正序,之后形成若干个两个数字组成的集合。在这些集合里面,任取两个集合A,B。
其中a1<a2 , b1<b2
于是我们先比较a1和b1,将两个数中较小的数放在第一位(不妨假设a1放了新的排序,记为c1),然后我们再比较a2和b1的大小,若b1较小,则放在新排序的第二位(c2),再比较b2与a2.较小的数字可以再次放在第三位c3(不妨设为b2),最大的数字a2于是放在末尾
举个例子:
A = { 1 , 6 }
B = { 2 ,5 }
于是C第一次先放进1
C = { 1 }
第二次放入 2
C = { 1 , 2 }
第三次放入5
C = { 1 , 2 , 5 }
最后放入 6
C = { 1 ,2 ,5 ,6 }
于是又可以获得一个有序的集合
利用分治思想,我们可以把n个需要排列的数字进行二分,所需要的操作的时间复杂度变为 O ( n × l o g n ) O(n×logn) O(n×logn)
> MERGE(A,p,q,r)
> n1 = q - p + 1
> n2 = r - q
> let L[1 … n1 + 1] and R[1…… n2 + 1] be new array
> for i in (1 , n1]
> L[i] = A [p + i - 1]
> for j in (1 , n2]
> R[j] = A[q + j]
> L[n1 + 1] = ∞
> R[n2 + 1] = ∞
> i = 1
> j = 1
> for k in (p,r]
> if L[i] <= R[j]
> A[k] = L[i]
> i++
> else
> A[k] = R[j]
> j++
C语言代码的实现(递归)
#include<stdio.h>
int arr[] = {
9,5,3,4,8,1,2,3,4,56};
void

本文详细解析了如何使用伪代码展示分治排序策略,通过实例演示如何将数字拆分、比较与合并,最终达到O(n log n)的时间复杂度。涵盖了C语言、C#和Python三种语言的代码实现,适合理解不同编程语言中分治思想的应用。
最低0.47元/天 解锁文章
643

被折叠的 条评论
为什么被折叠?



