insertionSort

插入排序

插入排序的思想:简单来说就是用一个变量来记录你要插入的数据,然后在内层for循环中遍历找到合适的位置插入

外循环执行N-1次,这很明显。
但内循环执行的次数取决于输入:
在最好的情况下,数组已经排序并且(a [j]> X)总是为假所以不需要移位数据,并且内部循环运行在O(1),
在最坏的情况下,数组被反向排序并且(a [j]> X)始终为真插入始终发生在数组的前端,并且内部循环以O(N)运行。
因此,最佳情况时间是O(N × 1) = O(N) ,最坏情况时间是O(N × N) = O(N2).

void insertionSort(int a[],int lenth)                 
{                                                     
 int i,j,flag,temp = 0;                            
 for(i = 1; i < lenth; i++){                       
  flag = a[i];                                  
  //j--寻找合适位置插入flag                     
  for(j = i - 1; j >= 0 && a[j] > flag; j--){   
   a[j + 1] = a[j];                       
  }                                             
  //找到合适位置将flag插入有序数列              
  a[j + 1] = flag;                              
 }                                                 
 for(i = 0; i < 10; i++){                          
  if(i % 5 == 0 && i != 0){                     
   cout << endl;                             
  }                                             
  cout << a[i] << " ";                          
 }                                                 
}                                                     
                                                      
int main()                                            
{                                                     
 int a[10] = {9,8,95,84,59,7,29,74,4,41};          
 insertionSort(a,10);                              
 return 0;                                         
}                                                     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值