
基础排序算法
wzc_ss
知道越多越无知
展开
-
八☞冒泡排序
八☞冒泡排序 冒泡排序 比较相邻的元素,如果前一个比后一个大,交换之。 第一趟排序第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。 第二趟将第二大的数移动至倒数第二位 … 因此需要n-1趟; 证明 对于每一次比较操作。若aj ≤ aj+1,aj, aj+1保持不变,于是aj ≤ aj+1;若aj > aj+1,则aj, aj+1互换位置,于是aj < aj+1。因此经过一次“比较”操作后恒有aj≤ aj+1。下面直接引用此结原创 2020-07-24 10:42:44 · 217 阅读 · 0 评论 -
八☞快速排序
快速排序 快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。 证明 将长度为N的无重复数组排序,快速排序平均需要~2NlnN次比较(以及1/6的交换) 快速排序最多需要约N2/2 次比较,但随机打乱数组能够预防这种情况。 特点 1、实现简单,适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。原创 2020-05-09 15:16:21 · 614 阅读 · 0 评论 -
八☞归并排序
归并排序 要将一个数组 排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来,典型的分治处理思想。 证明 对于长度为N的任意数组,自顶向下的归并排序需要 ½NlgN 至 NlgN 次比较。 对于长度为N的任意数组,自顶向下的归并排序最多需要访问数组 6NlgN次。 特点 1、它能够保证将任意长度为 N 的数组排序所需时间和 NlogN 成正比。 2、缺点 则是它所需的额外空间和N成正。 ...原创 2020-04-23 19:22:09 · 254 阅读 · 0 评论 -
八☞希尔排序
希尔排序 希尔排序的思想是使数组中任意间隔为h的元素都是有序的。这样的数组被称为h有序数组。换句话说,一个h有序数组就是h个互相独立的有序数组编织在一起组成的一个数组。在进行排序时,如果h很大,我们就能将元素移动到很远的地方,为实现更小移动提高排序效率。用这种方式,我们都能够将数组排序。这就是希尔排序。 证明 研究希尔排序性能需要的数学论证超出了能力范围,没有找到相关资料,以后在研究吧,看下希尔排...原创 2020-04-23 17:15:32 · 168 阅读 · 0 评论 -
八☞插入排序
插入排序 将当前元素插入到已经有序数组中的适当位置。与选择排序一样,当前索引左边的所有元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能会被移动。但是当索引到达数组的右端时,数组排序就完成了。和选择排序不同的是,插入排序所需的时间取决于输入中元素的初始顺序。(对一个很大且其中的元素已经有序(或接近有序)的数组进行排序将会比对随机顺序的数组或是逆序数组进行排序要快得多)。 ...原创 2020-04-22 11:39:15 · 234 阅读 · 0 评论 -
八☞选择排序
选择排序 一种最简单的排序算法是这样的: 首先,找到数组中最小的那个元素,其次,将它和数组的第 一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。 再次,在剩下的元素中 找到最小的元素,将它与数组的第二个元素交换位置。 如此往复,直到将整个数组排序。这种方法 叫做选择排序,因为它在不断地选择剩余元素之中的最小者。 证明: 可以通过算法的排序轨迹来证明这一点。我们用一张N×N的表格来...原创 2020-04-22 10:41:46 · 226 阅读 · 0 评论