直接插入排序算法

直接插入排序算法对于序列长度较小或者序列长度大但是基本有序的序列排序效率较高,但是序列长且无序,建议使用希尔排序算法
package sort;


//插入排序算法
public class InsertSort {
	public static void main(String args[]){
		int a[] ={0,9,5,6,10,2,7,8};
		directInsertSort(a);
	}
	
	//打印当前数组的内容
	public static void printArray(String text,int []a){
		System.out.print(text);
		int n = a.length;
		//遍历数组当中的内容
		for(int i=0;i<n-1;i++){
			System.out.print(a[i]+",");	
		}
		System.out.println(a[n-1]);
		
	}
	
	//直接插入排序(从小排到大)
	/*排序思想:
	 * 用数组a[0]作为标记位,实际排序序列为{9,5,6,10,2,7,8}
	 * 将a[1]作为第一个有序序列,从a[2]开始排序
	 * 对比有序序列的最后一位a[i-1]和a[i]的大小,如果大于则将a[i]放入标记位,进行排序;如果小于等于,则是有序的,不需要排序
	 * 有序序列当中从后开始查找插入标记位a[0]的位置,如果不是标记位置,将数据后移一位;如果是,则插入数据
	 */
	public static  int[] directInsertSort(int []a){
		printArray("当前的数组为:", a);
		
		//计算输入数组a的长度
		int n = a.length;
		
		//从a[2]开始排序
		for(int i=2;i<n;i++){
			
			//如果后一位比前一位小,就记入标记位进行排序;后一位比前一位大,则是有序的,不需要排序
			if(a[i]<a[i-1]){
				a[0] = a[i];
				printArray("将第"+i+"位放入标记位:",a);
				//排序,查找插入的位置
				int j;
				//因为a[i]已经放入了标记位,所以从i-1位开始从后向前移动数据
				for(j=i-1;a[0]< a[j];j--){
					//使前一位的数据等于后一位的数据,相当于后移了一位
					a[j+1] = a[j];
				}
				
				//当a[0]>a[j]时跳出循环,这时数组当中的情况为 a[j] a[j+1] a[j+1](j+1位已经后移了一位了),
				//所以只要将a[j+1] = a[0]即可
				a[j+1] = a[0];
				printArray("从后开始移动数据,找到插入数据位置为"+(j+1)+":",a);
			}	
		}
		return a;
	}
}
注释当中过程已经说的很清楚了,直接看输出结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值