三种简单排序C++实现

1 插入排序

#include<iostream>
using namespace std;

void insert(int a[] ,int len){
    // 依次插入每一个元素
    for(int i = 1; i < len ;i++){
        // cout<<"size is"<<sizeof(a)/sizeof(int)<<endl;
        int k = a[i];
        int j = i-1;
        for(;a[j]>k && j>=0;j--) a[j+1] = a[j];

        a[j+1] = k;
        for(int z = 0; z <= i;z++ ) cout<<a[z]<<" ";
        puts("");
        // for(int z = 0; z<=i;z++ ) cout<<a[z]<<endl<<endl;
        //从已排序数组中寻找该插入的位置
    }   
}
int main(){
    int r[]= {3,1,2,45,6};
    // cout<<len(r)<<endl;
    int len = sizeof(r)/sizeof(int);
    insert(r,len);
    for(int i = 0; i < sizeof(r)/sizeof(int);i++ ) cout<<r[i]<<endl;

}

已经内存优化

  • 代码接口问题
    • 让可复用性更高
    • 单一责任原则
    • 参数逻辑分离
    • 封装

良好的代码风格会使你付出1.2倍的编码时间,减少一半的调试时间

2 冒泡排序

#include<iostream>
using namespace std;
void bub(int a[],int len){
    //冒n-1次泡
    for(int i = 0;i<len-1;i++){
    for(int j = 0;j<len-i-1;j++) if(a[j]>a[j+1]) swap(a[j],a[j+1]);
    //从0开始左右交换
    for(int z = 0; z < len;z++ ) cout<<a[z]<<" ";
    puts("");
}
}
int main(){
   int r[]= {5,4,3,2,1};
    // cout<<len(r)<<endl;
    int len = sizeof(r)/sizeof(int);
    bub(r,len);
    for(int i = 0; i < sizeof(r)/sizeof(int);i++ ) cout<<r[i]<<endl;
}

3 选择排序

#include<iostream>
using namespace std;;
void select(int a[] ,int len){
    int index=0;
    //遍历n次 存储最小值下标 
    for(int j = 0;j<len ;j++){
        index = j;
        for(int i=j+1 ;i<len;i++){
        if(a[i]<a[index]) index = i;
        }
        swap(a[index],a[j]);

        for(int z = 0; z < len;z++ ) cout<<a[z]<<" ";
        puts("");
        //交换前面元素与最小元素下标
    }  
}
    


int main(){
    int r[]= {5,4,3,2,1,123,-2,0};
    // cout<<len(r)<<endl;
    int len = sizeof(r)/sizeof(int);
    select(r,len);
    for(int i = 0; i < sizeof(r)/sizeof(int);i++ ) cout<<r[i]<<endl;
}

其实这些算法在实际使用上并不多,建议直接使用c++sort函数
可以参考我的博文https://www.cnblogs.com/addzero/articles/16574950.html

posted @ 2022-08-11 09:46  加零lan  阅读(67)  评论(0编辑  收藏  举报