常见的几种排序——冒泡排序和插入排序

冒泡排序

思想:

冒泡排序的思想比较简单,就是两两数据进行比较,大的往后走,每循环一次就确定一个数的位置,就犹如扔石头,越重的石头落入海底越深,上图中第一次循环8的位置就确定了,所以下一次循环的个数就可以减一

具体代码实现:

void BubbleSort(int *arr,int len)
{
    int tmp = 0;
    for(int i = 0;i < len -1;i++)
    {
        for(int j = 0;j < len - i -1;j++)
        {
            if(arr[j] > arr[j+1])
            {
                tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;

            }
         }
    }
}

插入排序

思想:

插入排序的主要思想分为三步:第一先找到位置,第二挪动位置,第三插入数据;具体过程如下图:

定义i和j指针,将i指向的数据放入tmp中,比较j指针的数据和tmp的大小,如果j指向的数据小于tmp,就把j指针减一,若是一直小于tmp就一直比较到j为0时停止,否则就找到位置,挪动j到i之间数据的位置,在将tmp的数据插入即可

具体代码实现如下:

void InsertSort(int *arr,int len)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int tmp = 0;
    for(i = 1;i<len;i++)
    {
        tmp = arr[i];
        for(j = i-1;j>=0;j--)
        {
            if(arr[j] > tmp)
            {
                break;
            }
        }
        for(k = i-1;k>=j;k--)
        {
            arr[k+1] = arr[k];
        }
    }
arr[j] = tmp;
}

上述代码根据初始思路编写,但当需要插入的位置为0号下标时就会出错,例 1 2 0,当j=0时循环继续,接下来j就会减一,那么j的位置就会变成-1,越界,所以提倡使用下面的代码:

void Insert_Sort(int * arr,int len)
{
    int i = 0;
    int j = 0;
    int tmp = 0;
    for(i = 1;i<len;i++)
    {
        tmp = arr[i];
        for(j = i-1;j>=0;j--)
        {
            if(arr[j] <= tmp)
            {
                break;
            }

            else
            {
                arr[j+1] = arr[j];
            }
        }
    }
arr[j+1] = tmp;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值