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

    你可能感兴趣的文章
    Node出错导致运行崩溃的解决方案
    查看>>
    node基础(二)_模块以及处理乱码问题
    查看>>
    node安装及配置之windows版
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 7827 质数的和与积
    查看>>
    NOIp2005 过河
    查看>>
    NOIp模拟赛二十九
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>
    NoSQL介绍
    查看>>
    NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
    查看>>
    Now trying to drop the old temporary tablespace, the session hangs.
    查看>>
    np.arange()和np.linspace()绘制logistic回归图像时得到不同的结果?
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>