版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010095372/article/details/84453488
有点点像希尔排序的整齐版 但是更像快速排序
如果有两个有序的数组合并成一个的话会省下好多时间,那我就把一个数组分成两个,每个弄成有序的。那…我把分下的两个数组,再按这个这个办法,一直分下去,直到一个子数组里面只有一个元素,再合合合起来。
分————治————合
老师还给您的知识,我今天再拿回来吧
总跟两个有序单链表和一个有序单链表一样的
//弄一个辅助数组
int b[10];
void Merge(int a[], int low, int mid, int high) {
int k, i, j;
//拷贝
for (k = low; k <= high; k++) {
b[k] = a[k];
}
//双线作战b[low...mid] b[mid+1...high]
for (i = low, j = mid+1, k = i; i <= mid && j <= high; k++) {
if(b[i] < b[j])
{
a[k] = b[i++];
}else {
a[k] = b[j++];
}
}
//完成后在a中就ok了
//剩下那边还有富余就直接接上去
while (i <= mid) {
a[k++] = b[i++];
}
while (j <= high) {
a[k++] = b[j++];
}
}
void MergeSort(int a[], int low, int high){
if(low < high) {
int mid = (low + high)/2;
MergeSort(a, low, mid);
MergeSort(a, mid+1, high);
Merge(a, low, mid, high);
}
}
89 7 6 5 43210
789 6 5 43210
789 56 43210
56789 4 3 2 1 0
56789 34 2 1 0
56789 234 1 0
56 789 234 01
56789 01234
0123456789
0123456789