博客
关于我
【排序算法总结】
阅读量: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/

    你可能感兴趣的文章
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的location匹配规则的关键问题详解
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡和反相代理的配置
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    nginx转发端口时与导致websocket不生效
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置Https证书
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>