插入排序

插入排序

实现原理:

插入排序是在插入的过程中,逐渐将范围不断扩大的排序方法,例如先从数组下标为1的元素开始,比较1所在的元素和0所在元素的大小。如果满足条件(按升序排列)就把1和0位置所在的元素元素进行交换,第一次比较结束。然后从2开始,先是2和1比较,满足就交换,不满足就不变,再是1和0比较,再重复之前的过程,第二次比较结束。然后从3一直到N-1。从这块我们可以看到,插入排序是将有序的范围逐渐扩大,也就是说当每一次比较结束时,前面的已经排好序了。

主要代码如下:

 

 1 /*bool sort(int n) {//插入排序
 2   for (int i = 1;i < n;i++) 
 3    for (int j = i;j > 0 && compare(j, j - 1);j--) 
 4     exchange(j, j - 1);
 5   return true;
 6  }*/
 7 //---------------------------------------------
 8 /*bool Sort::compare(int i, int j) {//比较两个数组元素大小
 9  return a[i] < a[j] ? true : false;
10 }*/
11 //----------------------------------------------
12 /*bool Sort::exchange(int i,int j) {//交换两个数组元素的位置
13  int tmp = 0;
14  tmp = a[i];
15  a[i] = a[j];
16  a[j] = tmp;
17  return true;
18 }*/

 

插入排序代分析:

对于大部分有序的数组而言,使用插入排序是比较好的选择。因为如果大部分有序的话,交换的次数就会非常少,最好情况(数组已有序)比较次数为N-1交换次数为0。所以就会非常节省运行时间。最坏情况就是数组是逆序的,比较次数为N*N-1,交换次数为N*N-1。

 

转载于:https://www.cnblogs.com/sunlxp/p/8900742.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值