归并排序的基本思想
归并排序是一种另一类排序方法。所谓归并是指将两个或两个以上的有序表合并成一个新的有序表。归并排序
的基本思想是将一个具有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程序
本文介绍了一种基于归并排序的方法来计算数组中的逆序对数量。这种方法利用了分治的思想,通过递归将大问题分解为小问题,然后在合并阶段计算逆序对的数量。在 C 语言实现中,使用了辅助数组来存储排序结果,并通过...
**归并排序求逆序数的O(n log n)方法**: 归并排序是一种分治算法,它将大问题分解为小问题来解决。在归并过程中,我们可以顺便计算逆序对。在归并两个已排序的子数组时,比较它们的元素并计算逆序对。这个过程可以...
本压缩包“NiXuShu.rar_NiXuShu_逆序数”包含了一个使用归并排序算法计算逆序数的实现,名为“归并排序求逆序数”。归并排序是一种稳定的排序算法,其基本思想是将大问题分解为小问题来解决,然后将小问题的解合并...
### 归并求逆序对 分治 递归 ...通过对归并排序求逆序对的方法的学习,我们可以了解到如何巧妙地结合分治策略来解决复杂的问题。这种方法不仅高效而且易于理解,是处理逆序对问题时的首选方案之一。
采用归并排序的方法来就算一个序列总的逆序数
本主题将深入探讨四种常见的排序算法:归并排序、快速排序以及与链表相关的排序方法。 首先,我们来讨论归并排序(Merge Sort)。这是一种基于分治策略的排序算法。归并排序将大问题分解为小问题,然后逐步合并这些...
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
以下是关于"插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序"这十大经典排序算法的详细解释: 1. 插入排序:插入排序是一种简单的排序算法,它通过构建有序...
《算法-求排列的逆序数(信息学奥赛一本通-T1237)》这个主题涉及到的是计算机科学中的一个重要概念,逆序对或逆序数,它在算法设计和分析中扮演着关键角色,特别是在解决排序和组合优化问题时。逆序数是衡量一个...
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
本文将深入探讨三种常见的高效排序算法:堆排序、快速排序和归并排序。它们都是基于不同的原理和策略,具有各自的优势和适用场景。 首先,堆排序是一种基于比较的排序算法,利用了二叉堆的数据结构。二叉堆是一个...
在计算机科学和编程领域,"数组的逆序数"是一个重要的概念,特别是在...例如,在快速排序和归并排序中,逆序数可以用来衡量算法的效率。在实际应用中,当处理大量数据时,有效的逆序数计算算法能够显著提高程序性能。
快速排序、归并排序和堆排序都是经典且高效的排序算法,它们各自具有独特的实现方式和性能特点。这篇文章将详细探讨这三个排序算法,并对比它们的时间复杂度。 首先,我们来看快速排序。快速排序由C.A.R. Hoare在...
归并排序和插入排序是两种常见的排序算法,它们在计算机科学和编程领域有着广泛的应用。归并排序是一种基于分治思想的排序算法,而插入排序则是一种简单直观的排序算法,适用于小规模或部分有序的数据。 **归并排序...
本实验旨在通过对两种经典排序算法——快速排序和归并排序的研究与实现,深入理解它们的基本原理、时间复杂度,并通过编程实践比较这两种算法在不同数据规模下的性能表现。 #### 二、快速排序 **1. 基本思想** ...
快速排序和归并排序是两种常用的排序算法,它们在计算机科学和编程中有着广泛的应用。本文将详细讨论这两种排序算法的原理、实现方式以及性能对比。 快速排序是一种由C.A.R. Hoare在1960年提出的分治算法。其基本...
逆序数的计算通常与排序算法如快速排序、归并排序等有关,因为它们可以利用逆序数作为优化策略或理解算法复杂性的工具。对于整数数组,逆序对是指在数组中的一对数字i和j,满足i 但a[i] > a[j]。对于字符串,我们...