插入排序的算法原理比较简单,通过构建有序序列来达到排序的目的。比如给出一个数组a,那么首先会将第一个元素作为一个已经排序的序列,然后从第二个元素开始向已经排序的序列(就是第一个元素)从后向前扫描,如果比这个序列中的元素小的话,就插入到相应元素的前面,然后第三个元素再从这两个元素组成的有序序列的后面扫描,找到比它小的位置后就插入,否则结束扫描,以此类推。时间复杂度为O(n*n).
归并排序的时间效率为O(n * log n),归并排序(MergeSort)的基本思想是:将待排序文件看成为n个长度为1的有序子文件,把这些子文件两两归并,使得到「n/2」个长度为2的有序子文件;然后再把这「n/2」个有序文件的子文件两两归并,如此反复,直到最后得到一个长度为n的有序文件为止,这种排序方法成为二路归并排序。
插入排序具有空间原址性,任何时候都只需要常数个额外元素空间存储临时数据,但时间复杂度高,而归并排序算法时间复杂度低,但的空间效率不高,需要多耗费一倍的空间。
//插入排序
public void sort(int a[]){
for(int j = 1;j < a.length;j++){
int temp = a[j];
int i = j-1;
while((i>=0)&&(a[i]>temp)){
a[i+1] = a[i];
i = i-1;
}
a[i+1] = temp;
}
}
//归并排序
public void sort(int a[]){
for(int j = 1;j < a.length;j++){
int temp = a[j];
int i = j-1;
while((i>=0)&&(a[i]>temp)){
a[i+1] = a[i];
i = i-1;
}
a[i+1] = temp;
}
public void merge(int a[],int p,int q,int r){
int n1 = q-p+1;
int n2 = r-q;
int []b1 = new int[n1+1];
int []b2 = new int[n2+1];
for(int i = 0;i < n1;i++){
b1[i] = a[p+i];
}
for(int j = 0;j < n2;j++){
b2[j] = a[q+j+1];
}
b1[n1] = Integer.MAX_VALUE;
b2[n2] = Integer.MAX_VALUE;
sort(b1);
sort(b2);
int i = 0;
int j = 0;
for(int k = p;k<=r;k++){
if(b1[i]<b2[j]){
a[k] = b1[i];
i++;
}else{
a[k] = b2[j];
j++;
}
}
}
public void mergeSort(int [] a,int p,int r){
if(p<r){
int q = (p+r)/2;
mergeSort(a, p, q);
mergeSort(a, q+1, r);
merge(a, p, q, r);
}
}
分享到:
相关推荐
这里我们将深入探讨两种常见的排序算法:插入排序(Insertion Sort)和归并排序(Merge Sort),它们都是在Java环境下实现的。 **插入排序**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
本项目涵盖了五种经典的排序算法:快速排序、堆排序、归并排序、插入排序和选择排序。接下来,我们将深入探讨这些算法的原理、实现及性能特点。 1. **快速排序**: 快速排序由C.A.R. Hoare在1960年提出,是一种采用...
以下是关于"插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序"这十大经典排序算法的详细解释: 1. 插入排序:插入排序是一种简单的排序算法,它通过构建有序...
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
插入排序、冒泡排序、归并排序、快速排序四种排序方式的C++实现,各写成了一个函数,主函数中可以选择调用那一个。初始化数组时用的是随机种子srand((int)time(0))。在宏中定义数组大小。
本文将深入探讨两种经典的排序算法——插入排序和归并排序,并提供C++实现的源代码,同时对这两种算法的复杂度进行分析。 插入排序是一种简单直观的排序算法,其基本思想是将待排序的数组分为已排序区间和未排序...
归并排序与二分归并排序类似,也是基于分治思想。不同之处在于,归并排序不使用二分查找,而是将数组分为两半,然后对每一半进行排序,再合并。归并排序在MATLAB中实现时,也需要递归地将数组划分为更小的部分,...
- 插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 - C++中,插入排序可以通过一个for循环和一个while循环实现,for循环...
下面将详细讲解这7种排序算法:快速排序、归并排序、插入排序、选择排序、冒泡排序、堆排序以及希尔排序。 1. **快速排序**:由C.A.R. Hoare提出的,采用分治策略。基本思想是选取一个基准元素,通过一趟排序将待...
各种常用c++排序算法,包括插入排序、冒泡排序、选择排序、快速排序、归并排序、希尔排序等
其中包含了各种对数组排序的方法,数组下标从1开始,有插入排序(直接插入排序、希尔排序),交换排序(起泡排序、快速排序),选择排序(简单选择排序,堆排序(另外写))、归并排序(递归,非递归)。
本篇将详细阐述标题和描述中提到的几种线性表排序算法,包括插入排序、希尔排序、冒泡排序、快速排序、堆排序以及归并排序。 1. **插入排序**: 插入排序是一种简单直观的排序算法,它的工作原理是通过构造一个...
选择排序,冒泡排序,插入排序,归并排序Python代码
归并排序和插入排序是两种常见的排序算法,它们在计算机科学和编程领域有着广泛的应用。归并排序是一种基于分治思想的排序算法,而插入排序则是一种简单直观的排序算法,适用于小规模或部分有序的数据。 **归并排序...