标签:
归并排序:
将待排序的数组划分成若干的子数组使得这些子数组都是有序的,再将这些数组进行并,使得合并后的数组也是有序的,最后得到的数组既是已排好序的数组了
代码如下:
//合并排序 //将unsort[start,middle] 和 unsort[middle] 按照顺序排列到sort数组中 void marge(int unsort[], int start, int middle, int end) { int sort[10]; int i = start,j = middle + 1,k = start; while(i < middle+1 && j < end+1) { if(unsort[i] < unsort[j]) { sort[k++] = unsort[i++]; } else { sort[k++] = unsort[j++]; } } while(i < middle+1) { sort[k++] = unsort[i++]; } while(j < end+1) { sort[k++] = unsort[j++]; } for(int i = start; i < end+1; i++) { unsort[i] = sort[i]; } } void marge_sort(int unsort[], int lenght) { int i = 0; int d = 1; //排列是以1,2,4,8进行增长的,进行合并的一个数组的长度大于等于数组的长度,就不用比较了,表示次数组已经比较完成 while(d<lenght+1) { //对比的第一个数组的第一个值得索引应该在数组范围内 while(i+d-1 < lenght) { if(i+2*d-1 < lenght) { marge(unsort, i, i+d-1, i+2*d-1); i = i+2*d; } else { marge(unsort, i, i+d-1, lenght-1); cout<<endl; i=lenght; } } d=d*2; i = 0; } }
注意:
marge函数是对两数组进行对比的函数,对比的方法既是a数组的第一个值与b数组的第一个值进行对比,若是a的第一个值小,则将a[0]放入到一个临时的数组c[0]中,再将a[1]与b[0]比较,若b[0]小,则c[1]=b[0]....依此类推,最后将剩下的那个数组的值全部插入到c数组的末尾。
标签:
原文地址:http://www.cnblogs.com/JuneXiangBlogs/p/5287027.html