常见排序算法整理1(C++实现)

1. 冒泡排序

  • 时间复杂度O(n2)
  • 空间复杂度O(1)

  算法的基本思想:

  • 相邻元素交换,一共n-1轮,每轮交换n-1-i个元素

  C++实现:

  • int* bubbleSort(int* A, int n) {
        for(int i=0;i<n-1;i++)
        {
            for(int j=0;j<n-1-i;j++)
            {
                if(A[j]>A[j+1])
                    swap(A[j],A[j+1]);
            }
        }
        return A;

    }

2. 选择排序

  • 时间复杂度O(n2)
  • 空间复杂度O(1)

  算法的基本思想:

  • 将元素分为待排序与已排序两类。每次从待排序的元素中选择最小的一个元素插入到待排序元素的最后,需要选择n-1次。

  C++实现:

  • int* selectionSort(int* A, int n) {
        for(int i=0;i<n;i++)
        {
            int min=i;
            for(int j=i+1;j<n;j++)
            {
                if(A[j]<A[min])
                    min=j;
            }
            swap(A[min],A[i]);
        }
        return A;

    }

3. 插入排序

  • 时间复杂度O(n2)
  • 空间复杂度O(1)

   算法的基本思想:

  • 将元素分为待排序与已排序两类。默认将第一个元素放入已排序类中,从第二个元素开始遍历,将所取的当前值与已排序的元素进行比较。比较的方法为从后向前比较,若该已排序元素的值不小于当前值,则将该已排序元素的位置+1,否则插入当前值到已排序类中。

   C++实现:

  • int* insertionSort(int* A, int n) {
            for(int i=1;i<n;i++)
            {
                int get=A[i];
                int j=i-1;
                while(j>=0&&A[j]>=get)
                {
                    A[j+1]=A[j];
                    j--;
                }
                A[j+1]=get;
            }
            return A;
        }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值