插入排序算法分析
已知n个元素的无序数组A
基本思想:将数组A看做由已排序部分B和未排序部分C组成,然后取出C中的第一个元素,并与B中的数组元素从右向左依次比较,直到找到比它小的元素,并插入其后,重复以上步骤,直到数组中C中的元素全部插入到B中,则此时B即为A数组排序后的结果。
正确性分析:(1)初始情况下,将A中的第一个元素看做B,剩余为C,显然B此时为已排序的!
(2)将C中的元素ci 插入到B中,这时总能在B中找到一个位置,使得B为有序数组;
算法描述:
%插入排序,A为待排序数组
function A = my_insert(A)
size_a = size(A,2);
for i = 2:1:size_a
j = i - 1;
key = A(i);
while(j > 0 && key < A(j))
A(j+1) = A(j);
j = j - 1;
end
A(j+1) = key;
end
时间复杂度: o(n^2)
优点:算法稳定,排序在本数组内进行,节省内存,适用于数组元素少的情况。
缺点:当比较次数越多时,移动元素次数的次数也会越多,不适用于大量元素的排序。
//直接插入排序
public static int[] insertSort(int _data[]){
int len = _data.length;
int result[] = new int[len];
int j, key;
for(int i = 0; i < len; i++){
//j为结果数组中最后一个元素的位置,初始为负值,直接放入 结果数组
j = i - 1;
key = _data[i];
//从右往左依次比较移动元素,若比需插入的元素大,向后移动,否则插入结果数组
while(j >= 0 && result[j] > key){
result[j+1] = result[j];
j--;
}
result[j+1] = key;
}
return result;
}
本文详细介绍了插入排序的基本思想、算法描述及实现过程。插入排序是一种简单直观的排序算法,通过不断将未排序数组的第一个元素插入到已排序数组的适当位置来完成排序。适合于小规模数据的排序。
401

被折叠的 条评论
为什么被折叠?



