直接插入排序及改进

最近看了下排序,就把自己的学习过程记录下来

<span style="font-size:14px;">public class Sort1 {
	/*
	 * 插入排序,在已经排序好的序列中,插入一个元素后,仍然排列有序
	 * 总体思路是查找要插入数字在数组中的位置,位置之前的数据不变,位置之后的数字下标加1
	 */
	public static void main(String[] args) {

		// 被插前的数组
		int[] m = new int[] { 1, 2, 3, 4, 5, 7, 8, 9 };
		// n是插入后的数组
		int[] n = new int[m.length + 1];
		// 要插入的数字
		int a = 6;

		for (int j = 0; j < m.length; j++) {
			if (a > m[j]) {
				
				n[j] = m[j];//当集合中的数小于a时,直接将集合中的m[j]赋值给n[j]
				
				}else{
				//当集合中出现m[j]大于a时,在n[j]放入a,将m[j]及其以后的数字赋值给n[j+1]	
				n[j] = a;
				for (int l = j; l < m.length; l++) {
					n[l + 1] = m[l];
					}
					break;
				}

			}
		//遍历集合,查看排序情况
		for (int i = 0; i < n.length; i++) {
			System.out.print(n[i] + ",");
		}

	}

}</span>
运行结果如下:

1,2,3,4,5,6,7,8,9


改进排序:

<span style="font-size: 24px;">

</span><span style="font-size:14px;">public class Sort2 {

	public static void main(String[] args) {
		int temp;//定义临时变量,保存要交换的值
		int [] a ={32,22,54,76,8,21,43,23,41,34,};//随便建立一个无序数组
		for (int j = 1; j < a.length; j++) {
			
			//下面这个for循环对排序没有影响,只是为了方便观察数组是如何排序,在排序前遍历下数组
			for (int i = 0; i < a.length; i++) {
				System.out.print(a[i]+",");
			}
			System.out.println();//换行
			
			
			temp = a[j];
			
			/*
			 * 下面for循环开始进行比较,按照从小到大排列
			 * 注意i一定比j小,j是外层循环,i是内层循环,a[i]在数组前面,a[j]在数组后面
			 * 首先是a[i]和a[j]比较,此时i=0,j=1,如果第一个大于第二个,则将第一个值,赋值给第二个
			 * 那第一个值怎么办呢?别急,下面有个a[k+1]=a[k];就是填补空缺的第一个值得
			 * 具体运行的过程是这样的:如果a[i]>a[j]时,就将a[j-1]的值移到a[j]上,把a[j-2]的值
			 * 移到a[j-1]上……,以此类推,把a[i]移到a[i+1]上,剩下的循环就可以break掉,因为循环内
			 * 已经是有序的了
			 * 
			 */
			for (int i = 0; i < j; i++) {
				if (a[i]>temp) {//想实现从大到小排序,这里改为a[i]<temp
					for (int k = j-1; k >=i; k--) {
						a[k+1]=a[k];
					}
					a[i]=temp;
					break;//终止第二层循环
				}
				
			
				
			}
			
		}
		//遍历下最终结果
		System.out.println("最终结果是:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+",");
		}

	}

}
</span>

运行结果:

32,22,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
8,22,32,54,76,21,43,23,41,34,
8,21,22,32,54,76,43,23,41,34,
8,21,22,32,43,54,76,23,41,34,
8,21,22,23,32,43,54,76,41,34,
8,21,22,23,32,41,43,54,76,34,
最终结果是:
8,21,22,23,32,34,41,43,54,76,


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值