七个基础排序算法(均为内部排序):
直接插入排序
希尔排序
冒泡排序
简单选择排序
快速排序
堆排序
二路归并排序排序算法稳定性:经过排序后,具有相同关键码的元素之间的相对次序保持不变,则称该排序方法是稳定的;否则不稳定。直接插入排序:void InsertSort(int a[],int n){ // index start at 1, a[0] is temp one
i...
分类:
编程语言 时间:
2016-03-28 00:15:58
阅读次数:
189
各种排序算法比较1.稳定性比较插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的选择排序、希尔排序、快速排序、堆排序是不稳定的2.时间复杂性比较插入排序、冒泡排序、选择排序的时间复杂性为O(n2)其它非线形排序的时间复杂性为O(nlog2n)线形排序的时间复杂性为O(n);3.辅助空...
分类:
编程语言 时间:
2015-12-23 21:19:13
阅读次数:
226
一、归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是採用分治法(Divide and Conquer)的一个很典型的应用。将已有序的子序列合并,得到全然有序的序列。即先使每一个子序列有序。再使子序列段间有序。若将两个有序表合并成一个有序表。称为二路归并。归并过程为:比較a[i]和a[...
分类:
编程语言 时间:
2015-12-20 10:30:03
阅读次数:
212
1.从时间复杂度比较 从平均时间复杂度来考虑,直接插入排序、冒泡排序、直接选择排序是三种简单的排序方法,时间复杂度都为O(n2),而快速排序、堆排序、二路归并排序的时间复杂度都为O(nlog2n),希尔排序的复杂度介于这两者之间。若从最好的时间复杂度考虑,则直接插入排序和冒泡排序的时间复杂度最好,....
分类:
编程语言 时间:
2015-12-05 23:58:35
阅读次数:
471
思路我学习的归并是简单的二路归并,思路如下:① 将数组平均分成两份② 递归重复①,直到每个数组中只有1个元素,只有一个元素的数组可以认为是排好序的③ 将两个排好序的数组合并成一个排好序的数组④ 重复③直到最终得到一个排好序的数组javascript实现/** * 归并排序 * @param arr ...
分类:
编程语言 时间:
2015-10-12 14:29:43
阅读次数:
168
逆序数=两子序列的逆序数+本序列逆序数 我们知道在对序列进行二路归并排序的时候,要将序列拆分成若干子序列,先将子序列排序,再合并子序列构成最终排序后的序列。二路归并算法还有一个特点,在进行归并操作时候的两个子序列是有序序列,所以,我们可以利用这一点,在归并子序列的时候,其中的子序列内部的逆序数...
分类:
其他好文 时间:
2015-09-15 16:23:45
阅读次数:
139
一:要点归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二:归并排序思想主要分为两步:1....
分类:
编程语言 时间:
2015-08-29 12:33:40
阅读次数:
257
归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide
and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和...
分类:
编程语言 时间:
2015-08-19 09:29:21
阅读次数:
166
package algrithm;import java.util.Scanner;public class Sort { public static void mergeSort(int a[], int l, int r) { if (l >= r) return; int mid=(l...
分类:
编程语言 时间:
2015-08-05 23:53:39
阅读次数:
133
题目链接: 1913: yifan and matrix题目描述: 有一个n*n的矩阵,在每一行取出一个数,可以得到n个数的和,问前n小的和分别是多少?解题思路: 对于两个数组a[n],b[n],我们可以用二路归并维护一个升序序列a[i]+b[j](1 2 #include 3 #inclu...
分类:
其他好文 时间:
2015-07-30 11:03:58
阅读次数:
159