`
stinge
  • 浏览: 153712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

插入排序

阅读更多

插入排序算法分析

 

已知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;
}
 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics