标签:arr temp -- s1 ++ mergeSize int 算法
1.归并排序(非递归)
public void mergeSort(int arr[]) {
int size = arr.length;
int mergeSize = 1;
while(mergeSize < size) {
int L = 0;
while(L < size) {
int M = L + mergeSize - 1;
if(M >= size) {
break;
}
int R = Math.min(size - 1,M + mergeSize);
merge(arr,L,M,R);
L = R + 1;
}
if(mergeSize > size / 2) {
break;
}
mergeSize <<= 1;
}
}
public void merge(int arr[],int left,int mid,int right) {
int s1 = left;
int s2 = mid + 1;
int i = 0;
int temp = new int[right - left + 1];
while(s1 <= mid && s2 <= right) {
if(arr[s1] <= arr[s2]) {
temp[i ++] = arr[s1 ++];
}else {
temp[i ++] = arr[s2 ++];
}
}
while(s1 <= mid) {
temp[i ++] = arr[s1 ++];
}
while(s2 <= right) {
temp[i ++] = arr[s2 ++];
}
for(int j = 0;j < temp.length;j ++) {
arr[low + j] = temp[j];
}
}
2.求数组中的每个数左边比他小的数的和的总和
public class MergeSort {
int res = 0;
public int mergeSort(int arr[],int low,int height) {
int size = arr.length;
int mergeSize = 1;
while(mergeSize < size) {
int L = 0;
while(L < size) {
int M = L + mergeSize - 1;
if(M >= size) {
break;
}
int R = Math.min(size - 1,M + mergeSize);
merge(arr,L,M,R);
L = R + 1;
}
if(mergeSize > size / 2) {
break;
}
mergeSize <<= 1;
}
return res;
}
public void merge(int arr[],int low,int mid,int height) {
int s1 = low;
int s2 = mid + 1;
int temp[] = new int[height - low + 1];
int i = 0;
while(s1 <= mid && s2 <= height) {
if(arr[s1] < arr[s2]) { //若左右相同,一定要先入右边
res += arr[s1] * (height - s2 + 1);
temp[i ++] = arr[s1 ++];
}else {
temp[i ++] = arr[s2 ++];
}
}
while(s1 <= mid) {
temp[i ++] = arr[s1 ++];
}
while(s2 <= height) {
temp[i ++] = arr[s2 ++];
}
for(int j = 0;j < temp.length;j ++){
arr[low + j] = temp[j];
}
}
}
标签:arr,temp,--,s1,++,mergeSize,int,算法 来源: https://www.cnblogs.com/study-Road/p/15398771.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。