直接插入排序

Posted 菜鸟根据地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接插入排序相关的知识,希望对你有一定的参考价值。

 

 

 1 void Insertsort(int * L ,int n)
 2 {
 3     if(n<= 0)
 4         return ;
 5     int tip = 0;
 6 
 7     for(int i = 0 ; i< n-1; i++) //最开始这里循环到0-n导致错误
 8     {
 9         if(L[i+1] < L[i])
10         {
11             int temp = L[i+1];
12             
13             for(int j = i ;j >= 0 && L[j] > temp ;j--)
14             {
15                 L[j+1] = L[j];
16                 tip = j;
17             }
18             L[tip]  = temp;
19         }
20     }
21     
22 }

一开始在最上面的循环开始,i的范围过大,

可以看下面数组的下标,在进行操作的时候,如果出现 i+1的时候,就要注意i的循环上限是否需要减一,当循环中出现i-1的时候,循环i

的下限是否需要加一!!!

 

 

 

直接插入排序 的时间复杂度:最好的情况为o(n)   最坏的情况为o(nxn)  平均情况为 o(nxn)

空间复杂度为o(1);

 

冒泡,简单选择和直接插入都是简单算法,这里面的直接插入的性能优于简单选择,简单选择优于冒泡。

 

冒泡是遍历每一个元素进行比较,进行交换

简单选择是遍历每个元素,选择最小的,然后进行一次交换,一次遍历

直接插入是,不用遍历每一个元素,直接按照前后进行插入。

 

三个算法都是稳定算法。

以上是关于直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

7种基本排序算法的Java实现

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

直接插入折半插入希尔排序

直接插入折半插入希尔排序

直接插入排序算法——Java实现