插入排序的算法原理比较简单,通过构建有序序列来达到排序的目的。比如给出一个数组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);
}
}
分享到:
相关推荐
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序源码实现,里面有详细讲解,对新手应该有帮助
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
给初学者学习算法用,用java实现的排序算法,包括二路归并和插入排序。
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
选择排序,冒泡排序,插入排序 基数排序,快速排序,归并排序
插入排序、冒泡排序、归并排序、快速排序四种排序方式的C++实现,各写成了一个函数,主函数中可以选择调用那一个。初始化数组时用的是随机种子srand((int)time(0))。在宏中定义数组大小。
编程实现 快速排序,堆排序,归并排序,插入排序,选择排序; 对于不同的数组大小,比较这些算法的复杂度; 数组的测试,分为已排序数组和随机数组。
直接插入排序 冒泡排序 快速排序 直接选择排序 堆排序 二路归并排序 C#源代码 使用C#实现的数据结构中的排序算法
21、折半插入排序 22、21、折半插入排序 22、冒泡排序 21、折半插入排序 22、冒泡排序 23、快速排序 21、折半插入排序 22、冒泡排序 23、快速排序 24、简单选择排序 21、折半插入排序 22、冒泡排序 23、快速排序 24...
各种常用c++排序算法,包括插入排序、冒泡排序、选择排序、快速排序、归并排序、希尔排序等
插入排序、选择排序、希尔排序、堆排序、冒泡、双向冒泡、快速排序、归并排序、递归的归并排序、基数排序
其中包含了各种对数组排序的方法,数组下标从1开始,有插入排序(直接插入排序、希尔排序),交换排序(起泡排序、快速排序),选择排序(简单选择排序,堆排序(另外写))、归并排序(递归,非递归)。
用C++,模板写的 7中排序. 快速排序, 归并排序,插入排序,选择排序,起泡排序,堆排序,希尔排序
使用c语言比较几种常用排序的使用时间(归并排序、插入排序、归并排序、冒泡排序、选择排序)
MATLAB实现《算法设计与分析》中的插入排序、二分归并排序、归并排序实验,其中包括.m文件和实验报告,安徽大学本科课程。
C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
选择排序,冒泡排序,插入排序,归并排序Python代码