直接插入排序

直接插入排序


先通过一个例子来体会下插入排序的执行流程
例如原始序列 int array[10] = {11, 12, 44, 33, 56, 7, -5, 99, 8, 5};


1.一开始看到数组第一个元素array[0] = 11, 这个数当然是有序的
11               12, 44, 33, 56, 7, -5, 99, 8, 5


2.插入第1个元素 12   因为12 > 11, 所以不需要移动
11, 12           44, 33, 56, 7, -5, 99, 8, 5


3.插入第2个元素44    因为44 > 12, 所以不需要移动
11, 12, 44,    33, 56, 7, -5, 99, 8, 5


4.插入第3个元素33    因为33 < 44, 所以44,需要后移一位,33插入到原来44的位置,但是33>12,
所以12不需要移动
11, 12, 33, 44               56, 7, -5, 99, 8, 5


4.插入第4个元素56    因为56 > 44, 所以不需要移动
11, 12, 33, 44, 56                7, -5, 99, 8, 5


5.插入第5个元素7    因为56 > 7, 所以56后移一个位置,因为44 > 7, 所以44后移一个位置,同理33>7
33后移一个位置,同理可的到最后的有序序列
7, 11, 12, 33, 44, 56                -5, 99, 8, 5




。。。。。。。


最后可得到得有序序列
-5      5       7       8       11      12      33      44      56      99






  


#include <stdio.h>
#include <stdlib.h>


//待排序的数据放到array中,数组元素个数为n个
void InsertSort(int array[], int n)
{
int i, j;
int temp;

for (i = 1; i < n; i++)//数组从下标0开始存储,第一个元素有序,所以从第二个元素开始处理
{
temp = array[i];//将待插入的元素暂存在temp中
j = i-1;

//从待排元素之前的元素开始扫描,如果大于待排元素,则后移一位
while (j >= 0 && temp < array[j])
{
array[j+1] = array[j];
--j;
}
//找到要插入位置,把temp中暂存的元素插入
array[j+1] = temp;
}
}


//输入数组的函数
void prinT(int array[], int n)
{
int i;

for (i = 0; i < n; i++)
printf("%d\t", array[i]);

printf("\n");
}


int main()
{
int array[10] = {11, 12, 44, 33, 56, 7, -5, 99, 8, 5};

prinT(array, 10);

InsertSort(array, 10);

prinT(array, 10);

return EXIT_SUCCESS;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值