归并排序迭代法
- 设定一个步长,一开始步长为1,这样保证两两有序
- 步长每次乘2
- merge方法和递归的一样
void mergeSort(){
int [] arr = RandomArr();
int n = arr.length();
int mergeSize = 1;
while(mergeSize < n){
int l = 0;
int m = l + mergeSize - 1;
if (m > n){
break;
}
int r = Math.min(m+mergeSize,n-1);
merge(arr,l,m,r);
if(m>n/2){//这一步主要是防止溢出,当m接近n,但是会溢出int最大值时,变成负数
return;
}
mergeSize << 1;
}
}