博客
关于我
【排序算法总结】
阅读量:175 次
发布时间:2019-02-28

本文共 2097 字,大约阅读时间需要 6 分钟。

简单桶排序

简单桶排序是一种高效的排序算法,特别适用于处理有限的离散值。以下是对5个数(范围0到10)进行排序的具体实现方法。

步骤说明

  • 初始化桶数组:创建一个大小为11的数组book,用于存储0到10这11个可能的数。每个位置的值表示对应的数已出现的次数。

  • 填充桶数组:将输入的5个数逐一读取,并根据数值将其放入相应的桶中。每放入一个数,桶中的计数器加1。

  • 输出排序结果:遍历桶数组,依次输出每个桶中的数值。由于桶中的数值从0到10按顺序排列,因此直接输出桶数组的内容即可得到从小到大的排序结果。

  • 代码实现

    #include 
    int main() { int book[11]; // 数组大小为11,覆盖0到10的数 int i, t; // 初始化桶数组 for (i = 0; i <= 10; i++) { book[i] = 0; } // 读取输入并填充桶 for (i = 0; i < 5; i++) { scanf("%d", &t); book[t]++; } // 输出结果 for (i = 0; i <= 10; i++) { if (book[i] > 0) { printf("%d ", i); } } return 0;}

    冒泡排序

    冒泡排序是一种简单的交换排序算法,每次通过比较相邻元素并交换它们的位置,最终将较小的元素“冒”到正确位置。

    步骤说明

  • 初始化变量:读取输入数据,存储在数组a中。定义变量n表示数组的长度。

  • 执行冒泡排序

    • 进行n-1次冒泡操作。每一趟操作将最小的未排序元素“冒”到正确位置。
    • 在每一趟中,从左到右遍历数组,比较相邻元素。如果有较大元素,交换它们的位置。
  • 输出结果:遍历排序后的数组,输出每个元素。

  • 代码实现

    #include 
    int main() { int a[100]; int n, i, j, t; // 读取输入 scanf("%d", &n); for (i = 1; i <= n; i++) { scanf("%d", &t); a[i] = t; } // 冒泡排序 for (i = 1; i <= n - 1; i++) { for (j = 1; j <= n - i; j++) { if (a[j] > a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } // 输出结果 for (i = 1; i <= n; i++) { printf("%d ", a[i]); } return 0;}

    快速排序

    快速排序是一种高效的分治排序算法,通过选择基准元素并将数组划分为两部分来实现排序。

    步骤说明

  • 选择基准元素:选择数组中的第一个元素作为基准temp

  • 划分数组

    • 从数组左端开始,向右遍历,直到遇到小于基准的元素,记录位置i
    • 从数组右端开始,向左遍历,直到遇到大于基准的元素,记录位置j
    • 如果ij相遇,则说明整个数组已排序,结束递归。
  • 递归排序:对左边的子数组和右边的子数组分别执行快速排序。

  • 交换基准元素:将基准元素与i位置的元素交换,使其位于正确位置。

  • 代码实现

    #include 
    void quicksort(int left, int right) { int i, j, temp; if (left > right) { return; } temp = a[left]; i = left; j = right; while (i < j) { while (a[j] >= temp && i < j) { j--; } while (a[i] <= temp && i < j) { i++; } if (i < j) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } quicksort(left, i - 1); quicksort(i, right);}

    总结

    以上是对简单桶排序、冒泡排序和快速排序的详细说明。每种算法都有其独特的优势和适用场景,理解这些算法是掌握编程基础的重要部分。

    转载地址:http://khwn.baihongyu.com/

    你可能感兴趣的文章
    PostGIS中获取所有EPSG的编码以及对应Proj4字符串
    查看>>
    PostGIS在Windows上的下载与安装
    查看>>
    postgis数据库优化_postgresql 性能优化
    查看>>
    Postgres Docker版本安装mysql_fdw 插件
    查看>>
    Postgres invalid command \N数据恢复处理
    查看>>
    Postgres like 模糊查询匹配集合
    查看>>
    Postgres 自定义函数内实现 in 操作符的递归查询
    查看>>
    Postgres 返回当前时间前后指定天数的集合
    查看>>
    postgres--vacuum
    查看>>
    postgres--wal
    查看>>
    postgres--流复制
    查看>>
    postgres10配置huge_pages
    查看>>
    PostgreSQL 10.0 preview 变化 - pg_xlog,pg_clog,pg_log目录更名为pg_wal,pg_xact,log
    查看>>
    PostgreSQL 10.1 手册_部分 II. SQL 语言_第 15章 并行查询_15.2. 何时会用到并行查询?...
    查看>>
    PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较
    查看>>
    PostgreSQL 10.1 手册_部分 III. 服务器管理_第 21 章 数据库角色
    查看>>
    Postgresql 12.9如何配置允许远程连接
    查看>>
    PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别 应用场景分析
    查看>>
    Postgresql CopyManager 流式批量数据入库
    查看>>
    PostgreSQL cube 插件 - 多维空间对象
    查看>>