插入排序

插入排序

实现原理:

插入排序是在插入的过程中,逐渐将范围不断扩大的排序方法,例如先从数组下标为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。

 

posted @ 2018-04-21 13:28  叶落了无痕  阅读(181)  评论(0编辑  收藏  举报