插入排序算法——Java实现

1、原理 

    首先,介绍插入排序,对于少量元素的排序,它是一个有效的算法。插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些是桌子上牌堆中顶部的牌。

    对于插入排序,我们将其伪码过程命名为Insert_sorted,其中的参数是一个数组A[1,..,n],包含长度为n的要排序的一个序列。(在代码中,A中元素的数目n用A.length来表示)。该算法原指排序输入的数:算法在数组A中重排这些数,在任何时候,最多只有其中的常数个数字存储在数组外面。在过程Insert_sorted结束时,输出数组A包含排序好的输出序列。

    插入排序伪码:

Insert_sorted(A)
for j =2 to A.length
<span style="white-space:pre">	</span>key = A[j]
<span style="white-space:pre">	</span>//Insert A[j] into the sorted sequence A[1,..,j-1].
<span style="white-space:pre">	</span>i = j-1
<span style="white-space:pre">	</span>while i >0 and A[i] >key
<span style="white-space:pre">		</span>A[i+1] = A[i]
<span style="white-space:pre">		</span>i = i-1
<span style="white-space:pre">	</span>A[i+1] = key
    图2-2表明对A={5,2,4,6,1,3}该算法如何工作。下标j指出正被插入到手中的“当前牌”。在for循环(循环变量为j)的每次迭代的开始,包含元素A[1,..,j-1]的子数组构成了当前排序好的左手中的牌,剩余的子数组A[j+1,..,n]对应于仍在桌子上的牌堆。事实上,元素A[1,..,j-1]就是原来在位置1到j-1的元素,但现在已按序排列。


2、Java实现

public class Insert_sorted_test {

	public static void Insert_sorted(int[] A){
		
		for(int j = 1;j < A.length;j++){
			
			int temp = A[j];
			int i = j-1;
			while(i >= 0 && A[i] > temp){
				
				A[i+1] = A[i];
				i = i-1;
			}
			A[i+1] = temp;
		}
	}

	public static void main(String[] args) {
		 
		int[] data={5,2,4,6,1,3};
		
		System.out.println("原数据: ");
		for(int i =0;i < data.length;i++){
			
			System.out.print(data[i] + " ");
		}
		System.out.println();
		
		Insert_sorted(data);
		
		System.out.println("输出结果: ");
		for(int i =0;i < data.length;i++){
			
			System.out.print(data[i] + " ");
		}
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值