归并排序的基本思想
归并排序是一种另一类排序方法。所谓归并是指将两个或两个以上的有序表合并成一个新的有序表。归并排序
的基本思想是将一个具有n个待排序记录的序列看成是n个长度为1的有序列,然后进行两两归并,得到「n/2
个长度为2的有序序列,再进行两两归并,得到「n/4 个长度为4的有序序列,如此重复,直至得到一个长度为
n的有序序列为止。
public class fds {
/**
* @param args
*/
public static int asd=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={9,6,7,2,4,3,5,1};
mergeSort(a,0,7);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
System.out.print(asd);
}
public static void mergeSort(int[] array,int low,int height){
if(low>=height)return;
int mid = (low+height)/2;
mergeSort(array,low,mid);
mergeSort(array,mid+1,height);
merge(array,low,mid,height);
}
public static void merge(int[] array,int low,int mid,int height){
int i,j,h,k;
int[] temp = new int[array.length];
i=low;
h=low;
j=mid+1;
while(h<=mid&&j<=height){
if(array[h]<array[j]){
temp[i] = array[h];
h++;
}else{
temp[i] = array[j];
j++;
//计算逆序数,整个解题代码就是在这里多加了一行代码。
//其余都是归并排序的代码。
asd+=(mid-h+1);
}
i++;
}
if(j>height){
for(k=h;k<=mid;k++){
temp[i] = array[k];
i++;
}
}else{
for(k=j;k<=height;k++){
temp[i] = array[k];
i++;
}
}
for(k=low;k<=height;k++){
array[k] = temp[k];
}
}
}
分享到:
相关推荐
利用归并排序求逆序数,复杂度在O(nlgn)含测试用例
利用归并排序实现关于逆序数的计算,Java程序
利用归并排序求逆序对,有分治和递归,不过没有主函数
利用二路归并排序求逆序对,很巧妙的一种算法
采用归并排序的方法来就算一个序列总的逆序数
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
归并排序,排序等算法,数据结构,快速排序,链表排序归并排序,排序等算法,数据结构,快速排序,链表排序
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
1. 题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的... 计算右侧小于当前元素的个数(二叉查找树&二分查找&归并排序逆序数总结) 方法
通过归并排序计算逆序数,算法高效,是很多需要运用到逆序数问题的很好的一个接口
逆序对(归并排序)O(nlogn).cpp
归并排序求逆序数 Pell方程 Catalan数,100以内 欧拉函数讲解 组合计数 组合数计算(double) 组合数计算(高精度) r-组合生成算法 r-排列生成算法 r-错位排列生成算法 图论 传递闭包 欧拉回路判定 有向图...
| 归并排序求逆序数 25 | 逆序数推排列数 25 | 二分查找 25 | 二分查找(大于等于 V 的第一个值) 25 | 所有数位相加 25 Number 数论 26 1 |递推求欧拉函数 PHI(I) 26 |单独求欧拉函数 PHI(X) 26 | GCD ...
利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并且 (1) 统计每一种排序上机所花费的时间。 (2) 统计在完全正序,完全逆序情况下记录的比较...
单链表的创建,排序,归并,插入删除定位和获得元素,计算元素个数,打印链表
插入排序、选择排序、冒泡排序、归并排序、快速排序和堆排序。 有详细的思路及算法分析、伪代码、图解、示例代码等。 比较列表中的相邻元素,如果它们是逆序的话就交换它们的位置。重复多次后,最大的元素就“沉到”...
(1)排序算法包括:插入排序、希尔排序、堆排序、归并排序、快速排序、基数排序。 (2)对整数进行排序。 (3)程序功能:可从键盘输入初始数据个数(数据自动生成)、初始数据类别(随机、正序、逆序),并得出...
测试输入的数组中有多少个逆序对,本程序在归并排序的基础上实现,时间复杂度为O(nlgn)
统计数组中的逆序对的个数,基于归并排序的思想,先拆分为单个元素,再合并为两个元素的数组,组内统计后,排序,进行组建统计