合并算法:
package test1;
public class Merge
{
//递归分成小部分
public void merge_sort(int[] arrays,int start,int end){
if(start<end){
int m=(start+end)/2;
merge_sort(arrays,start,m);
merge_sort(arrays,m+1,end);
combin_arrays(arrays,start,m,end);
}
}
//合并数组
public void combin_arrays(int[] arrays,int start,int m,int end){
int length=end-start+1;
int temp[]=new int[length];//用来存放比较的数组,用完复制回到原来的数组
int i=start;//i是前一个数组的开头
int j=m+1;//下一个数组的开头
int c=0;//是一个计数器,用来计算数组a的序列
while(i<=m &&j<=end){
if(arrays[i]<arrays[j]){
temp[c]=arrays[i];
i++;
c++;
}else{
temp[c]=arrays[j];
j++;
c++;
}
}
while(i<=m){//对于特殊的序列,i未进行
temp[c]=arrays[i];
i++;
}
while(j<=end){//对于特殊的序列,j未进行
temp[c]=arrays[j];
j++;
}
c=0;
for(int t=start;t<=end;t++,c++){//打印
arrays[t]=temp[c];
}
snp(arrays);
}
//打印数组
public void snp(int[] arrays){
for(int i=0;i<arrays.length;i++){
System.out.print(arrays[i]+" ");
}
System.out.println();
}
public static void main(String[] args)
{
Merge m=new Merge();
int a[]={5,4,9,7};
m.merge_sort(a,0,a.length-1);
}
}
对于合并排序来讲:
1,先把数组用分治法进行划分,分为最小的基本单位
2.进行排序,可以分为几种排序方法,举个简单的例子,现在有四个数a,b,和c,d
进行排序有几种情况:
快速排序:
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
//参考:http://blog.youkuaiyun.com/morewindows/article/details/6684558
http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html
//参考:http://www.cnblogs.com/yangecnu/p/Introduce-Merge-Sort.html
参考文档:http://www.cnblogs.com/yangecnu/p/Introduce-Merge-Sort.html#