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);
冒泡,简单选择和直接插入都是简单算法,这里面的直接插入的性能优于简单选择,简单选择优于冒泡。
冒泡是遍历每一个元素进行比较,进行交换
简单选择是遍历每个元素,选择最小的,然后进行一次交换,一次遍历
直接插入是,不用遍历每一个元素,直接按照前后进行插入。
三个算法都是稳定算法。