前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 插入排序,冒泡排序和选择排序

C++ 插入排序,冒泡排序和选择排序

作者头像
用户6021899
发布2020-02-19 11:49:52
1.2K0
发布2020-02-19 11:49:52
举报

大学的时候学过C,现在已经忘得七七八八了,现在想再学一下C/C++。

刚试着重写/温习了3个最简单的排序算法。

插入排序:依次将右边未排序的元素插入到左边已排序序列的合适位置。

时间复杂度:O(n^2)

代码语言:javascript
复制
float* sort_insertion(float a[], int len_a)
{
    /*插入排序 类似我们排序扑克牌*/
    for(int i=1; i < len_a; i++)
    {
        float to_insert = a[i];
        // 索引0到 i-1 已排好序
        int j;
        for(j = i-1; a[j] > to_insert and j >=0 ; j--)
            a[j+1] = a[j];//大的往后退一位
        a[j+1] = to_insert;//a[j] > to_insert 不成立时 j+1的值即是待插入的位置
    }
    return a;
}

冒泡排序和选择排序大学都学过,不再赘述。

冒泡排序:

时间复杂度:O(n^2)

代码语言:javascript
复制
float* sort_bubble(float a[], int len_a)
{
    /*冒泡排序 依次比较相邻的两个元素,如果顺序错误就将它们的位置交换 */
    float temp;
    for(int i=0; i < len_a-1; i++)
    {
        for(int j =0 ;j<len_a-1-i; j++)
            {
                if (a[j] > a[j+1])
                {
                    temp = a[j];
                    a[j] = a [j+1];
                    a[j+1] = temp;
                }
            }
    }
    return a;
}

选择排序:

时间复杂度:O(n^2)

代码语言:javascript
复制
float* sort_selection(float a[], int len_a)
{
    /*选择排序 依次将左边未排序序列中的最大元素,存放到右边已排序序列的左端 */
    int j;
    float temp;
    for(int i= len_a-1; i >= 0; i--)
    {
        //未排序序列:a[0]到a[i]
        //找到未排序序列的最大元素的位置
        int maxIndex = 0;
        for(j=1; j <= i; j++)
        {
            if (a[j] > a[maxIndex])
                maxIndex = j;
        }
        //交换
        temp = a[i];
        a[i] = a[maxIndex];
        a[maxIndex] = temp;
    }
    return a;
}

随机数组生成部分的代码如下:

代码语言:javascript
复制
#include <iostream>
#include <time.h>
using namespace std;
float* sort_insertion(float a[], int len_a);
float* sort_bubble(float a[], int len_a);
float* sort_selection(float a[], int len_a);

int main()
{
    const int len_b =100;
    float b[len_b];
    //int len_b = sizeof(b)/sizeof(b[0]);//求数组长度
    srand(time(NULL)); //srand()设置随机种子seed, seed 随时间变化
    for (int i=0; i<len_b; i++)
    {
        b[i] = rand()%101 -50.0f;//随机数 -50 到 50
        //cout <<b[i]<<endl;
    }
    sort_bubble(b,len_b);
    //cout<<endl;
    for (int i=0;i<len_b;i++)
        cout<<b[i]<<endl;
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档