直接插入排序

 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);

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

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

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

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

三个算法都是稳定算法。

原文地址:https://www.cnblogs.com/xiaochige/p/8365375.html