直接插入排序和冒泡排序C实现

直接插入排序
1.基本思想:直接插入排序是一种简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的,记录数加1的有序表。
我们以整形数组为例,则上面说的记录可以理解成整形数据。当数组中只有一个元素时,则数组已然有序。若数组有多个元素,则从第二个元素开始依次查找待插入的位置,并将待插入的位置与元素位置之前的元素向后移动,然后将待插入的元素插入对应的位置。
2.例子
有数据如下:
12, 9, 38, 6, 25, 14, 3
共7个元素,假设我们已经按升序排好了前三个元素,即此时序列变为
9, 12, 38, 6, 25, 14, 3
此时我们需将6插入前三个有序数据中,插入过程如下

初始状态:9, 12, 38, 6
1. 9, 12, 6, 38
2. 9, 6, 12, 38
3. 6, 9, 12, 38

其它元素采用同样的方法进行排序。最坏情况下,有n-1个元素需进行插入,记录的移动次数为n(n-1)/2,故时间复杂度为O(n^2);
3.C语言代码

void InsertSort(int arr[], int size)
{
    int i = 1; //第1个元素有序,待插入的元素从下标为1的位置开始
    for (; i < size; i++)
    {
        int end = i - 1;
        int key = arr[i];   //将第i个元素记录下来,防止元素后移导致第i个元素丢失  
        //end>=0防止数组下标越界 
        while (end >= 0 && key < arr[end]) 
        {
            arr[end + 1] = arr[end];
            end--;
        }
        arr[end + 1] = key;
    }
}

冒泡排序
1.基本思想 将第一个数据和第二个数据进行比较,若第一个数据大于第二个,则交换之(升序)。然后比较第二个数据和第三个数据,依次类推,直至第n-1个记录和第n个记录进行比较。上述过程称为一趟冒泡排序。第一趟冒泡排序把最大的元素放入第n个记录的位置,第二趟对前n-1个元素进行冒泡排序,把次大的元素放入第n-1个记录的的位置,依次类推,直到把所有的元素排好序。

2.例子
初始状态:<12, 9>, 38, 6, 25, 14, 3

1.9, <12, 38>, 6, 25, 14, 3
2.9, 12, <38, 6>, 25, 14, 3
3.9, 12, 6,< 38, 25>, 14, 3
4. 9, 12, 6, 25, <38, 14>, 3
5. 9, 12, 6, 25, 14,< 38, 3>
6. 9, 12, 6, 25, 14, 3, 38

3.C语言代码

void BubbleSort(int *arr, int size)
{
    int i, j;
    for (i = 0; i < size - 1; i++)
    {
        int flag = 0;
        for (j = 0; j < size - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                Swap(&arr[j], &arr[j + 1]);
                flag = 1;
            }
        }
        if (0 == flag)//若某趟排序已使整个数组有序则结束
            return;
    }
}

void Swap(int *left, int *right)
{
    int tmp = *left;
    *left = *right;
    *right = tmp;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值