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

    你可能感兴趣的文章
    POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
    查看>>
    poj 1163 数塔
    查看>>
    POJ 1177 Picture(线段树:扫描线求轮廓周长)
    查看>>
    Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)
    查看>>
    POJ 1182 食物链(并查集拆点)
    查看>>
    POJ 1185 炮兵阵地 (状态压缩DP)
    查看>>
    POJ 1195 Mobile phones
    查看>>
    POJ 1228 Grandpa's Estate (稳定凸包)
    查看>>
    poj 1236(强连通分量分解模板题)
    查看>>
    poj 1258 Agri-Net
    查看>>
    quagga 和 zebos
    查看>>
    poj 1286 Necklace of Beads
    查看>>
    POJ 1321 棋盘问题
    查看>>
    poj 1321(回溯)
    查看>>
    Qt高级——Qt元对象系统源码解析
    查看>>
    qt调用vs2008编写的dll动态库(隐式调用)
    查看>>
    Qt读取注册表默认值
    查看>>
    poj 1679 判断MST是不是唯一的 (次小生成树)
    查看>>
    POJ 1703 Find them, Catch them
    查看>>
    POJ 1703 Find them, Catch them 并查集
    查看>>