生活随笔
收集整理的這篇文章主要介紹了
7-二路归并排序C实现(递增递减的简单转换)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、
主函數:void Mer_Sort(int* head,int low,int high,int Step_L,int Bool)
二路歸并
參數解釋
head:數組指針
[low, high]:需排序的數組范圍
Step_L:需排序步長
Bool:等于1表示從小到大排序,不等于1從大到小排序
主函數引用:void Array_Merge(int* head,int low,int high,int* head1,int low1,int high1,int L,int Step_L,int Bool)
對兩有序數組進行排序
參數解釋
head:數組指針
[low high]:head數組中需要進行調整的范圍
head1:數組指針
[low high]:head1數組中需要進行調整的范圍
L:兩數組中共需要調整的數據數量
Step_L:需排序步長
Bool:等于1表示從小到大排序,不等于1從大到小排序
說明
Step_L=1時,對下標low+{0,1,2,3,4,5…}排序
Step_L=2時,對下標low+{0,2,4,6,8,10…}排序
Step_L=3時,對下標low+{0,3,6,9,12,15…}排序
以此類推
例:
#include <stdio.h>
#include <time.h>
void Array_Merge(int* head
,int low
,int high
,int* head1
,int low1
,int high1
,int L
,int Step_L
,int Bool
){int Temp
[((high
-low
)/Step_L
+1)+((high1
-low1
)/Step_L
+1)];int i
=0,j
=low
,k
=low1
;if(Bool
){while(i
<((high
-low
)/Step_L
+1)+((high1
-low1
)/Step_L
+1) && (j
<=high
|| k
<=high1
)){if(k
>high1
){Temp
[i
]=head
[j
];j
+=Step_L
;i
++;continue;}if(j
>high
){Temp
[i
]=head
[k
];k
+=Step_L
;i
++;continue;}if(head
[j
]<=head1
[k
]){Temp
[i
]=head
[j
];j
+=Step_L
;}else{Temp
[i
]=head
[k
];k
+=Step_L
;}i
++;}}else{while(i
<((high
-low
)/Step_L
+1)+((high1
-low1
)/Step_L
+1) && (j
<=high
|| k
<=high1
)){if(k
>high1
){Temp
[i
]=head
[j
];j
+=Step_L
;i
++;continue;}if(j
>high
){Temp
[i
]=head
[k
];k
+=Step_L
;i
++;continue;}if(head
[j
]>=head1
[k
]){Temp
[i
]=head
[j
];j
+=Step_L
;}else{Temp
[i
]=head
[k
];k
+=Step_L
;}i
++;}}i
=0;while(i
<((high
-low
)/Step_L
+1)){head
[low
+i
*Step_L
]=Temp
[i
];i
++;}while(i
<((high
-low
)/Step_L
+1)+((high1
-low1
)/Step_L
+1)){head1
[low1
+(i
-((high
-low
)/Step_L
+1))*Step_L
]=Temp
[i
];i
++;}
}
void Mer_Sort(int* head
,int low
,int high
,int Step_L
,int Bool
){int Shigh
=low
+(((high
-low
+1)/Step_L
)-1+(((high
-low
+1)%Step_L
)!=0))*Step_L
;int L
=(Shigh
-low
)/Step_L
+1;if(L
>2){Mer_Sort(head
,low
,low
+((L
+1)/2-1)*Step_L
,Step_L
,Bool
);Mer_Sort(head
,low
+(((L
+1)/2-1)+1)*Step_L
,Shigh
,Step_L
,Bool
);}if(L
>1)Array_Merge(head
,low
,low
+((L
+1)/2-1)*Step_L
,head
,low
+(((L
+1)/2-1)+1)*Step_L
,Shigh
,L
,Step_L
,Bool
);
}int main(int argc
, char **argv
) {printf("Hello, World!\n");int s
[5];s
[0]=6;s
[1]=5;s
[2]=4;s
[3]=3;s
[4]=2;int i
=0;while(i
<5)printf("%d ",s
[i
++]);printf("\n---------\n");Mer_Sort(s
,0,4,1,1);int j
=0;while(j
<5)printf("%d ",s
[j
++]);return 0;
}
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的7-二路归并排序C实现(递增递减的简单转换)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。