(一)插入排序

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
      
      
//插入排序 最坏时间复杂度O(n²)
void sortbyinsert ( int a [], int n )
{
int i , j , key ; //key用于记录当前要插入的值
for ( i = 1 ; i < n ; i ++ ) //a[0]作为第一个元素,它是有序的,要排序的元素下标应从1到n-1;
{
key = a [ i ];
j = i - 1 ; //a[0]到a[i-1]已经是有序的了,将a[i]插入到有序数组中
while ( j >= 0 && a[j]>key ) //前一个元素比要插入的元素大,则要一一后移.&&操作符的特性,保证了数组不会越界。两个表达式不应交换位置
{
a [ j + 1 ] = a [ j ];
j -- ; //继续比较再前一个元素;
}
a [ j + 1 ] = key ; //此时的a[j]已经不大于要插入的元素了,所以合适的位置就是a[j+1];
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值