基本排序(五):基本排序算法的总结

基本排序的基础

  • 假设一个主要的排序算法不比数据处理,如数据读入和读出慢,就没有必要寻找一个更快的算法。
  • 假设被排序的文件适合放在内存中。则排序方法称为“内部排序”。从磁盘上对文件排序称为“外部排序”。差别是内部排序能够非常easy的訪问不论什么元素,可是外部排序必须顺序訪问元素。至少在大的数据块是如此。
  • 排序程序訪问元素的方式:通过keyword进行比較、直接訪问整个元素移动;
  • 排序函数都包过3个參数:数组、带排序字数组的左边界和右边界 void(Item a[], int l, int r);
  • 排序算法的执行时间:对N个元素排序时
    • 选择排序、插入排序、冒泡排序与N2成正比;
    • 希尔排序(插入排序的改进)与 N(3/2) 成正比;
    • keyword-索引排序与 N 成正比;
  • 怎样减小开销,加快排序速度:(重要)
    • 改用一种更高效的算法
    • 缩短内部循环
    • 检查是否有能够跳过的比較或者交换操作
  • 排序的稳定性

      当待排序记录的keyword均不同样时。排序结果是惟一的,否则排序结果不唯一。

     在待排序的文件里,若存在多个keyword同样的记录,经过排序后这些具有同样keyword的记录之间的相对次序保持不变,该排序方法是稳定的;若具有同样keyword的记录之间的相对次序发生变化,则称这样的排序方法是不稳定的。

    注意:

      排序算法的稳定性是针对全部输入实例而言的。

    即在全部可能的输入实例中,仅仅要有一个实例使得算法不满足稳定性要求。则该排序算法就是不稳定的

基本排序算法种类

1. 选择排序

选出数组中最小的元素,将它与数组中第一个元素交换,然后找出次小的元素。并将它与数组中第二个元素交换。。。直至整个数组排序完毕。即通过不断选出剩余数组中最小的元素实现。

2. 插入排序和希尔排序

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描。找到对应位置插入。

因而在从后向前扫描过程中,须要重复把已排序元素逐步向后移位。为最新元素提供插入空间。

3. 冒泡排序

遍历文件,假设紧邻的2个元素大小顺序不正确,就将两者交换,重复操作直至排序完毕

4. 索引和指针排序、链表排序、keyword排序

索引和指针排序、链表排序:间接排序,灵活性强,不会更改原始数据和keyword信息。

时间: 2024-10-13 15:55:21

基本排序(五):基本排序算法的总结的相关文章

常见的五类排序算法图解和实现(多关键字排序:基数排序以及各个排序算法的总结)

基数排序思想 完全不同于以前的排序算法,可以说,基数排序也叫做多关键字排序,基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法. 两种方式: 1.最高位优先,先按照最高位排成若干子序列,再对子序列按照次高位排序 2.最低位优先:不必分子序列,每次排序全体元素都参与,不比较,而是通过分配+收集的方式. 多关键字排序 例:将下表所示的学生成绩单按数学成绩的等级由高到低排序,数学成绩相同的学生再按英语成绩的高低等级排序.        第一个关键字是数学成绩,第二个关键字是英

各种基本算法实现小结(五)—— 排序算法

各种基本算法实现小结(五)-- 排序算法 (均已测试通过) * 选择排序 |____简单选择排序 |____堆排序 |____归并排序 * 交换排序 |____冒泡排序 |____快速排序 * 插入排序 |____直接插入排序 |____折半排序 |____希尔排序 * 分配排序 |____箱排序 |____基数排序 ====================================================================== 简单排序算法 1. 冒泡排序 测试环境

常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)

冒泡排序算法: 总的来说就是两两交换,反复直到有序,第一个记录和第二个记录,若逆序则交换,然后比较第二个和第三个记录,以此类推,直到第 n 个记录和第 n-1个记录比较完毕为止,第一趟排序,结果关键字最大的记录被安排在最后一个位置.对前 n-1个记录继续冒泡排序,使得关键字次大的记录安排在第 n-1个位置.如此重复,直到没有需要交换的记录为止(仅仅是第一个和第二个交换过为止).整个一趟趟的选出最值的过程,仿佛是那水里的气泡,咕嘟咕嘟的往上翻的过程. 递增冒泡排序过程图解: 一般先比较第一个元素和

数据结构与算法之--高级排序:shell排序和快速排序【未完待续】

高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序的是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希尔(shell)排序 希尔排序是基于插入排序的,首先回顾一下插入排序,假设插入是从左向右执行的,待插入元素的左边是有序的,且假如待插入元素比左边的都小,就需要挪动左边的所有元素,如下图所示: ==> 图1和图2:插入右边的temp柱需要outer标记位左边的五个柱子都向右挪动 如图3所示,相比插入排序

“《算法》第4版第2章‘排序’”:初级排序算法(选择、冒泡、插入、希尔)

<算法>第4版作者是Robert Sedgewick 和 Kevin Wayne. 1. 选择排序 选择排序可以说是最简单的排序方法.首先,找到数组中最小的那个元素:其次,将它与数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它就和自己交换):再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置.如此往复,直到将整个数组排序. 该书中提出一个命题:对于长度为N的数组,选择排序需要大约N2/2次比较和N次交换.  程序如下: 1 void SelectionSort::s

排序算法3--插入排序--希尔排序(缩小增量排序)

希尔排序(缩小增量排序) 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序.因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高. 以n=10的一个数组4

排序算法6--选择排序--简单选择排序

简单选择排序 简单选择排序属于选择排序, 选择排序的思想是:每一趟从待排序的记录中选出关键字最小的记录,按顺序放在以排序的记录序列的后面,知道全部排完为止. 1.简单选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少. 每次找出当前无序队列中的最小的元素与第一个交换位置,再选择第二小的与第二个交换位置 原始队列:   3 5 6 2 4 1(最小元素1与3交换) 第一步: 1 5 6 2 4 3 (当前最小元素2与5交换) 第二步: 1 2 6 5 4 3 (当前最小元素

C言语合并排序(兼并排序)算法及代码

合并排序也称兼并排序,其算法思惟是将待排序序列分为两局部,顺次对分得的两个局部再次运用合并排序,之后再对其停止兼并.仅从算法思惟上理解合并排序会认为很笼统,接下来就以对序列A[0], A[l]-, A[n-1]停止升序陈列来停止解说,在此采取自顶向下的完成办法,操作步调如下.(1)将所要停止的排序序列分为阁下两个局部,假如要停止排序的序列的肇端元素下标为first,最初一个元素的下标为last,那么阁下两局部之间的临界点下标mid=(first+last)/2,这两局部辨别是A[first -

C语言中的排序算法--冒泡排序,选择排序,希尔排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,

排序五:希尔排序

希尔排序(Shell Sort)也是插入排序的一种.也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 基本思想: 将待排序列划分为若干组,在每一组内进行插入排序,以使整个序列基本有序,然后再对整个序列进行插入排. 再从百度上贴个示例: 希尔增量: 希尔增量是指希尔提出了一种冲破二次时间屏障的算法. Donald Shell 提出了一种冲破二次时间屏障的算法Shellsort(希尔排序),在希尔排序中希尔给出了