C++数据结构与算法

1.插入排序

方式:从小到大排序
解释:双层循环,外层循环对应比较的后一个数据元素,保证每一个元素都进行了一次插入,内层循环对应比较的前一个数据元素,并逐个向前对比直到找到前一个元素比后一个小,开始下一轮比较。由此,从data[0]和data[1]开始,外层向后增量,内层向前插入到合适位置,保证有序行。

#include <iostream>

using namespace std;

enum Errcode{
        sucessful = 0,
        error
};

class insertionSort
{

public:
        int getData(){
                size_t num = sizeof(data)/(sizeof(int));
                cout << "num is:" << num  << endl;
                while(num)
                {
                        cin >> data[--num];
                }
                return sucessful;
        }

        void swap(int* a, int* b)
        {
                temp = *a;
                *a = *b;
                *b = temp;
        }

        int sort()
        {
                size_t num = sizeof(data)/sizeof(int);
                for(size_t i = 0; i < num; ++i)
                {
                        int tmp = i;
                        for(size_t j = i -1; j >= 0; j--,tmp--)
                        {
                                if(data[j] > data[tmp])
                                {
                                        swap(&data[tmp], &data[j]);
                                }
                                else
                                        break;
                        }
                }

        }

        void print()
        {
                size_t num = sizeof(data)/(sizeof(int));
                cout << "from min to max:" << endl;
                for(int i = 0; i < num; i++)
                {
                        cout << data[i] << "  ";
                }
                cout <<endl;
        }

private:
        int data[10];
        int temp;
};

int main(){

        insertionSort* insSort = new insertionSort;
        insSort->getData();
        insSort->sort();
        insSort->print();
}

结果:

[root@jn datastructcpp]# ./a.out 
num is:10
3
574
456
5875478
54674

3735
673
636
3563
6364
from min to max:
3  456  574  636  673  3563  3735  6364  54674  5875478  
[root@jn datastructcpp]# 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值