leetcode刷题c++各类排序总结

leetcode刷题c++各类排序总结

写在前面:

对于数据结构和算法来说,排序是最基础的,也是初学时理解较为困难的,这里作以记录,便于我自己复习,也是更加深我自己的理解

1、冒泡排序

冒泡排序几乎是最先了解的排序算法,思想也很简单:
如果每次我们将相邻元素进行对比,并且把较大的元素交换(swap)到后面,那么通过一轮的相邻对比,数组最后的元素就是这个数组中最大的元素。
那么我们进行n轮对比,每次对前n个元素进行相邻比较和交换,那么最终就会得到一个有序的数组。
实现如下 :

void bubble(int *arr,int n) {
   //冒泡排序
    //每一趟比较后把这一趟找到的最大元素放到数组最后
    for (int i = 0; i < n; i++) {
   
        for (int j = 0; j < n-1; j++) {
   //注意j<n-1,小心溢出
            if (arr[j] > arr[j + 1]) {
   
                swap(arr[j], arr[j + 1]);
            }
        }
    }
}

这里我们经常会用到swap的动作,初学时一般使用这样的方法进行交换:
假如有两个int类型的变量a和b

    int temp = a;
    a = b;
    b = temp;

所以,可以定义一个swap函数,方便后续的交换:

void swap(int& a, int& b) {
   
    int temp = a;
    a = b;
    b = temp;
}

这里需要使用引用的方式将参数传入函数

int i;
int &j = i;
相当于说“j是i的一个别名”
声明引用的同时必须初始化‘&j = i’ 指向一个已经存在的对象
一旦一个引用被初始化,不能指向其他对象

复杂度:
对冒泡排序来说,平均时间复杂度:O(n2)

2、选择排序

选择算法的思想是:
每次找到这一趟中的最小数,放在数组的开头(位置是走的趟数)
第一趟找到所有n个元素中最小的,放在第一个元素
第二趟找到后n-1个元素中最小的,放在第二个元素
……
第n-1趟找到后两个元素中最小的,放在第n-1元素(倒数第二个)
第n趟找到最后一个元素中最小的,放在第n个元素(最后一个)
实现:

void select(int* arr, int n) {
   //选择排序
    //每一次找到当前的最小数,放在这次的位置,第一次放在第一个,第二次放在第二个……
    for (int i = 0; i < n; i++) {
   
        int min = i;
        for (int j = i; j < n; j++) {
   
            if (arr[j] < arr[min]) {
   
                min = j;
            }
        }
        if (min != i) {
   
            swap(arr[i], arr[min]
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值