java编程题:用Java实现一个插入排序算法

import java.util.Arrays;

/**
 * java编程题:用Java实现一个插入排序算法
 * 
 * 基本思想:
 * 	在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
 */
public class Test13 {

	public static void main(String[] args) {
		int[] sortNum = {12,33,28,86,15,62,9,38};				//定义数组
		System.out.println("排序前:");
		System.out.println(Arrays.toString(sortNum));			//排序前
		
		insertSort(sortNum);									//开始排序
		
		System.out.println("排序后:");
		System.out.println(Arrays.toString(sortNum));			//排序后
	}
	
	/**
	 * 插入排序方法
	 * @param sortNum
	 */
	private static void insertSort(int[] sortNum){
		int len = sortNum.length;								// 获取数组长度,为了更高效,从for循环外获取数组长度
		int j = 0;
		int temp = 0;
		
		/*
		//写法1
		for (int i = 1; i < len; i++) {							// 从第二个元素开始,因为默认第一个元素是已经排好序的
			temp = sortNum[i];									// 待插入的元素,在第二个for循环中此值不能变的
			for (j = i; j > 0 && temp < [j-1]; j--) {	// 如果前一个元素大于待插入元素,则将前面的值后移
				sortNum[j] = sortNum[j-1];						// 交换位置
			}
			sortNum[j] = temp;
		}
		*/

		
		//写法2
		for (int i = 1; i < len; i++) {							// 从第二个元素开始,因为默认第一个元素是已经排好序的
			temp = sortNum[i];									// 待插入的元素,在下面的for循环中此值不能变的
			for (j = i; j > 0; j--) {
				if(sortNum[j-1] > temp){						// 如果前一个元素大于待插入元素,则将前面的值后移
					sortNum[j] = sortNum[j-1];					// 交换位置
				}else{
					break;
				}
			}
			sortNum[j] = temp;
		}
		
		
		/*
		//写法3
        for (int i = 1; i < len; i++) {							// 初始是从第二个元素开始的,因为默认第一个元素是已经排好序的  
            temp = sortNum[i];  								// 抽出待插入的元素,在下面的while循环中此值是不能变的  
            j = i;          									// 记录待插入的元素对应的索引。此索引要从后向前逐一对比。如果前一个元素大于待插的,那么将向移动一位  
            while (j > 0 && (sortNum[j - 1] > temp)) {  
            	sortNum[j] = sortNum[j - 1];  					// 向后移动一位  
                j--;                  							// 同时索引向前减一  
            }  
            sortNum[j] = temp;									// 一直到第一个元素或者遇到小于待插入的元素时,跳出while循环,此时j便是待插入的元素的位置索引              
        }
        */
		
		/*
		//写法4,容易理解,有点像冒泡排序的写法
		for(int i = 1 ; i < len; i++){  
            for(j = i; j > 0; j--){  
                if(sortNum[j] < sortNum[j - 1]){  
                    temp = sortNum[j];  
                    sortNum[j] = sortNum[j - 1];  
                    sortNum[j - 1] = temp;  
                }else{
                	break;//不需要交换,直接跳出循环
                }
            }  
        }
		*/
	}
	
}


参考:
http://www.cnblogs.com/0201zcr/p/4764427.html
http://www.cnblogs.com/xiaoming0601/p/5862793.html
http://www.cnblogs.com/xiaoduc-org/p/5745880.html
http://blog.csdn.net/ouyang_peng/article/details/46547091
http://blog.csdn.net/lovoo/article/details/51755695
http://blog.csdn.net/qy1387/article/details/7752973





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值