排序算法总结

本文总结了常见的比较类排序算法,包括冒泡排序、快速排序、插入排序、希尔排序、选择排序、堆排序和归并排序。详细介绍了每种排序算法的原理和代码实现,帮助读者深入理解排序算法的细节。
摘要由CSDN通过智能技术生成

排序算法总结

排序算法分类

比较类排序

交换排序

冒泡排序

冒泡排序:它重复地走访要排序的数列,依次比较两个元素,如果他们的顺序不满足升序(降序)要求就把它们交换回来。

算法描述(升序为例)
  1. 步骤一:比较相邻的元素。如果第一个比第二个大,就交换;

  2. 步骤二:对每一对相邻元素做同样的工作,从开始第一对到结尾最后一对,这样最后的元素应该是最大的数;

  3. 步骤三:将最后一个元素拿出,针对所有元素重复上述步骤;

    冒泡排序

代码
void bubbleSort(vector<int>& array) {
    int len = array.size();
    // 注意循环的终止条件
    for (int i = 0; i < len - 1; ++i) {
        for (int j = 0; j < len - 1 - i; ++j) {
            if (array[j] > array[j + 1]) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
}

快速排序

快速排序:通过一趟排序将待排记录分隔成独立的两个部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续排序,以达到整个序列有序。

算法描述
  1. 步骤一:从数列中挑出一个元素(一般为第一个),称为”基准“;
  2. 重新排序数组,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆放在基准的后面(相同的数可以放在任一边)。在这个分区推出之后,该基准就处于数列的中间位置。这个称为分区操作;
  3. 递归地把小于基准值元素的子数组和大于基准值元素的子数组排序。
    快速排序
代码
// 交换数组内两个元素
void swap(vector<int>& array, int i, int j) {
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

int partition(vector<int>& array, int start, int end) {
    int poivtElem = array[start];
    int i = start;
    for (int j = start + 1; j <= end; ++j) {
        if (array[j] < poivtElem)
            swap(array, ++i, j);
    }
    swap(array, i, start);
    re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值