C++ 三种简单排序 冒泡 选择 插入

本来是大一C语言基础,就在这里记录一下,就当存个板子

简单插入排序

插排是最简单一种排序方法,也是复杂度较高的一种

void Sort::insert_sort(int *num) {
    for (int i = 0; i < 13; i++) {
        for (int j = 0; j < i; j++) {
            if (num[i] > num[j]) {
                int temp = num[i];
                //向后移
                for (int k = i - 1; k >= j; k--) {
                    num[k + 1] = num[k];
                }
                num[j] = temp;
            }
        }
    }
}

冒泡(带flag)

插入排序的复杂度高,但是是一种稳定的排序方法

#include "iostream"

void bubble(int a[]) {
    int i, j, flag, temp;
    flag = 1;
    for (i = 0; i < 10; i++) {
        flag = 0;
        for (j = 9; j > i; j--) {
            if (a[j] > a[j - 1]) {
                flag = 1;
                temp = a[j];
                a[j] = a[j - 1];
                a[j - 1] = temp;
                //swap(a[j], a[j - 1]);
            }
            if (flag == 0)
                return;
        }
    }
}

int main() {
    int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    bubble(a);
    for(int i=0;i<10;i++)
        std::cout<<a[i]<<" "<<std::flush;
}


输出结果:
在这里插入图片描述

简单冒泡排序

冒泡也是一种稳定的算法,但是复杂度也挺高的

void Sort::bubble(int *num) {
    //从前向后冒泡
    /*for (int i = 7; i >= 0; i--) {
        for (int j = 0; j < i; j++) {
            if (num[i] > num[j]) {
                swap(num[i], num[j]);
            }
        }
    }*/
    //从后向前冒泡
    for (int i = 0; i < 13; i++) {
        for (int j = 12; j > i; j--) {
            if (num[i] > num[j]) {
                swap(num[i], num[j]);
            }
        }
    }
}

选择排序

选择排序相对于简单插入排序,复杂度降低
但同时是一个不稳定的排序方法

void Sort::choose(int *num) {
    int i;
    int j;
    /*for (i = 0; i < 13; i++) {
        int max_index = i;
        for (j = i; j < 13; j++) {
            if (num[j] > num[max_index])  max_index = j;
        }
        swap(num[i], num[max_index]);
    }*/
    for (i = 12; i >= 0; i--) {
        int max_index = i;
        for (j = 0; j < i; j++) {
            if (num[j] < num[max_index]) max_index = j;
        }
        swap(num[i], num[max_index]);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值