算法1:排序问题(1)

文章目录


  大道理什么的我已经不想多讲,直接上一些让自己重新理解问题的笔记才是硬核之事。今天我写的代码是排序问题,这是一个很古老,也是算法开课绕不开的问题,有很多种形态各样的排序算法——冒泡排序、插入排序、归并排序,快速排序、堆排序、希尔排序等等。
  今天我首先想接触的是插入排序和归并排序两种。首先来看一下插入排序——

插入排序

  主要思路是将一个新的数据插入到一个已经排好序的数组中,然后依次进行最终完成排序,这个算法的时间复杂度是 O ( n 2 ) O(n^2) O(n2),主要的问题存在于,由于数组是连续的空间,因此插入操作,实际上是两个相邻的数组之间比较大小然后交换位置的过程的重复。
——我先写出伪代码

## 输入:数组A
## 输出:排好序的数组A
for i in 2 to n:
    for j in i to 0:
        if A[j] < A[j - 1] ## 根据结果从大到小还是从小到大决定大于小于号
            swap(A[j - 1], A[j])

以下是插入排序的C++代码实现:

    #include <iostream>
    #define Length(A, B) (sizeof(A) / sizeof(B))
    void insert_sort(int *, int);
    void swap(int &, int &);
    void display(int *, int);

    int main(int argc, char const *argv[])
    {
        int A[] = {3, 2, 5, 4, 8, 7, 6};
        int length = Length(A, int);

        display(A, length);
        insert_sort(A, length);

        display(A, length);
        return 0;
    }

    void insert_sort(int A[], int length)
    {
        if (A == nullptr)
            return;

        if (lengt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值